首页 > 代码库 > 翻译的破烂,艹

翻译的破烂,艹

初学Python的时候,是不是很惊讶原来写一个类是如此的容易,不如:

1 class Foo():2     pass

这是一个完美有效(没什么作用)的类,我们可以创建这个类的实例对象。

1 f = Foo()

这是一个Foo的实例对象,我们来查查它的身份,原来是Foo的一个实例

1 >>>type(f)2 <class __main__.Foo>

f是一个完美有效,合理的Foo实例对象,但是没有实际作用。很多由其它编程语言转到python的人想知道如何去定义实例变量。通过写__init__方法,这个方法会在一个新对象创建时被执行。例如:

 1 class Foo(object): 2     def __init__(slef, x, y): 3         self.x = x 4         self.y = y 5  6 >>> f = Foo(100, abc) 7 >>> f.x 8 100 9 >>> f.y10 abc

表面上看我们定义了Foo实例对象f的两个变量x和y,它的表现的就是这样,大多数pythoner也这样认为如此。

那到底是不是这样呢?我只能说早点停止思考实例的变量和类的变量,你就会早点python是如何工作的。

为什么对象是这么工作的,它做了什么?在python里面实例变量和类变量是如何存在的?

属性是对象的基本成分,不对,应该说在python里面所有的基本组成。

每个对象都有属性。你可以通过"dir"内建函数查看。

 1 >>> s = acb 2 >>> len(dir(s)) 3 71 4 >>> dir(s)[:5] 5 [__add__, __class__, __contains__, __delattr__, __doc__] 6 >>> i = 123 7 >>> len(dir(i)) 8 64 9 >>> dir(i)[:5]10 [__abs__, __add__, __and__, __class__, __cmp__]11 >>> t = (1,2,3)12 >>> len(dir(t))13 3214 >>> dir(t)[:5]15 [__add__, __class__, __contains__, __delattr__, __doc__]16 >>> 

我们要如何去使用这些属性?可以通过 getattr(t, ‘__class__‘)

1 >>> getattr(t, __class__)2 <type tuple>3 #等同于,操作更加方便4 >>> t.__class__5 <type tuple>

设置一个属性

 1 >>> f = Foo(100,abc) 2 >>> f 3 <__main__.Foo object at 0x0130DDF0> 4 >>> setattr(f, x, 5)  #设置一个属性 5 >>> getattr(f, x) 6 5 7 >>> f.x 8 5 9 >>> f.x = 11 #这个方法更加方便10 >>> f.x11 11

我们几乎可以为所有对象添加属性

1 >>> def hello():2     return "Hello"3 4 >>> hello.abc_def = hi there!5 >>> hello.abc_def6 hi there!

 

翻译的破烂,艹