Python OOP 面向对象
1.Python实现OOP可以概括为三个概念:
- 继承:基于Python属性查找
- 多态:在x.method中,method的意义取决于x的类型
- 封装:方法和运算符实现行为,数据隐藏是一种惯例
2.委托:通常就是指控制器对象内嵌其他对象,而把运算请求传给那些对象。
3.类的伪私有属性:变量名压缩,一种把类所创建的变量名局部化的方式,主要是为了避免实例内的命名空间的冲突,当每个类说self.x时所得的值,
取决于最后一个赋值的是那个类。变量名
class C1: def meth1(self): self.x = 88 def meth2(self): print(self.x) class C2(object): """docstring for C2""" def metha(self): self.x = 99 def methb(self): print(self.x) class C3(C1,C2): pass if __name__ == "__main__": c3 = C3() c3.meth1() c3.metha() c3.meth2() # 此时调用输出为99,会覆盖C1的x的值
class C1: def meth1(self): self.__x = 88 def meth2(self): print(self.__x) class C2(object): """docstring for C2""" def metha(self): self.__x = 99 def methb(self): print(self.__x) class C3(C1,C2): pass if __name__ == "__main__": c3 = C3() c3.meth1() c3.metha() c3.meth2() # 此时调用输出为88
4.绑定方法与无绑定方法
对象点号运算,而没有用括号调用之前产生绑定方法
类点号运算之后,产生无绑定方法,但是调用之前必须明确的传入self参数
class Test: def display(self,*arg): print(arg) if __name__ == "__main__": t1 = Test() func = t1.display # 绑定方法 func([1,2,3]) # 调用时不必指出self参数,因为已经将方法绑定到对象t1 t2 = Test() func2 = Test.display # 无绑定方法 func2(t2,[4,5,6]) # 调用时必须明确指定self参数