标签:style blog color 使用 sp div on log ad
初学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.y 10 ‘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 32 14 >>> 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.x 11 11
我们几乎可以为所有对象添加属性
1 >>> def hello(): 2 return "Hello" 3 4 >>> hello.abc_def = ‘hi there!‘ 5 >>> hello.abc_def 6 ‘hi there!‘
标签:style blog color 使用 sp div on log ad
原文地址:http://www.cnblogs.com/jypwn/p/4033682.html