python类的设计 - littleboy12580/learning_python GitHub Wiki
Python支持变量名压缩,让类内某些变量局部化,一般方法是:在class语句内开头有两个下划线,但结尾没有两个下划线的变量名会自动扩张,从而包含了所在类的名称
class C1:
def meth1(self): self.__X = 88
def meth2(self): print(self.__X)
class C2:
def metha(self):self.__X = 99
def methb(self): print(self.__X)
class C3(C1,C2): pass
I = C3()
I.meth1()
I.metha()
print(I.__dict__)
I.meth2()
I.methb()
运行结果为
{'_C2__X': 99, '_C1__X': 88}
88
99
委托是指将对象包装在代理类中,使代理类增加额外的行为,从而把其他运算传给被包装的对象。代理类包含了被包装的对象的接口。在Python中,委托通常是以__getattr__钩子方法实现
class wrapper:
def __init__(self,object):
self.wrapped = object
def __getattr__(self,attrname):
print('Trace: ',attrname)
return getattr(self.wrapped,attrname)
- 在传统类(Python2.3以前)中,属性搜索处理对所有路径深度优先,直到继承树的顶端,然后从左到右进行
- 在新式类中,采用广度优先搜索
可以把类传给会产生任意种类对象的函数,这样的函数在OOP设计领域中称为工厂
def factory(aClass,*args,**kwargs):
return aClass(*args,**kwargs)