http://cowboy.1988.blog.163.com/blog/static/75105798201091141521583/
这篇文章总结的非常好
主要注意的地方是
1,在类内调用成员函数
要用类名调用,而且要传入self(非静态成员函数是实例相关的)
如:
class Foo(object):
def bar(self):
print "bar!"
def spam(self):
bar(self) # 错误,引发NameError
Foo.bar(self) # 合法的
2,静态成员函数的使用
要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。
class SimClass():
@staticmethod
def ShareStr():
print "This is a static Method"
SimClass.ShareStr() #使用静态函数
3,多继承,以及多继承下,两个父类同名函数的调用问题
class D(oject): pass #D继承自object
class B(D): #B是D的子类
varB = 42
def method1(self):
print "Class B : method1"
class C(D): #C也是D的子类
varC = 37
def method1(self):
print "Class C : method1"
def method2(self):
print "Class C : method2"
class A(B,C): #A是B和C的子类
varA = 3.3
def method3(self):
print "Class A : method3"
如果我要调用A.method1()
,会出现什么结果?答案是ClassB:method1. 书上是这样介绍的:
当搜索在基
类中定义的某个属性时,Python采用深度优先的原则、按照子类定义中的基类顺序进行搜索。**注意**(new-style类已经改变了这种行为,为了向前兼容,默认情况下用户定义的类为经典类,定义新式类需要继承所有类的基类object或者继承自object的新类。新式类的搜索方式是采用广度优先的方法查找属性。在 python 3
里面,所有的类都是object类的子类(隐式))上边例子中,如果访问 A.varB ,就会按照A-B-D-C-D这个顺序进行搜索,只要找到就停止搜索.若有多个基类定义同一属性的情况,则只使用第
一个被找到属性值