翻译的破烂,艹

初学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!'

 

posted @ 2014-10-18 21:25  pwn_pjy  阅读(200)  评论(0)    收藏  举报