[Python 学习笔记] 9: Class
2009-10-13 00:00:00 来源:WEB开发网继承
Python 支持多继承,但有几点需要注意:
1. 基类 __init__ / __del__ 需显示调用。
2. 继承方法的调用和基类声明顺序有关。
>>> class Base1:
def __init__(self):
print "Base1"
def test(self):
print "Base1 test..."
>>> class Base2:
def __init__(self):
print "Base2"
def test(self):
print "Base2 test..."
>>> class Class1(Base2, Base1):
def __init__(self):
Base1.__init__(self)
Base2.__init__(self)
print "Class1"
>>> a = Class1()
Base1
Base2
Class1
>>> a.test()
Base2 test...
成员
Python Class 同样包含类型和实例两种成员。
>>> class Class1:
i = 123 # Class Field
def __init__(self):
self.i = 12345 # Instance Field
>>> print Class1.i
123
>>> print Class1().i
12345
有几个很 "特殊" 的 "规则" 需要注意。
(1) 我们可以通过实例引用访问类型成员。因此下面的例子中 self.i 实际指向 Class1.i,直到我们为实例新增了一个成员 i。
>>> class Class1:
i = 123
def __init__(self):
print self.i
print hex(id(self.i))
>>> hex(id(Class1.i)) # 显示 Class1.i
'0xab57a0'
>>> a = Class1() # 创建 Class1 实例,我们会发现 self.i 实际指向 Class1.i。
123
0xab57a0
>>> Class1.__dict__ # 显示 Class1 成员
{'i': 123, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x00D39470>}
>>> a.__dict__ # 显示实例成员
{}
>>> a.i = 123456789 # 为实例新增一个成员 i
>>> hex(id(a.i)) # 显示新增实例成员地址
'0xbbb674'
>>> a.__dict__ # 显示实例成员
{'i': 123456789}
更多精彩
赞助商链接