组合,多态,封装, @property
组合
什么是组合
- 对象的某一个属性是另一个类的对象
class A:
def __init__(self,B)
self.B = B
class B:
pass
b = B()
a = A(B)
为什么使用组合
- 减少代码冗余
如何使用组合
多态
什么是多态
- 一类事物的多种形态
多态性
- 都有自己的特性,例如 🐖,🐕 都会叫,叫就是他们的多态性
- 崇尚鸭子类型(只要走路像鸭子【对象中有某个绑定方法】,那你就是鸭子)
- 不考虑对象类型的情况下使用实例(也就是使用对象中的相同名字的方法)
- 好处
-- 增加了程序的灵活性
-- 增加了程序的可扩展性
封装
封装是什么意思
- 就是把东西包起来,别人用不了,外部访问不到,但是在python中这个包装数据的箱子是纸做的,通过一些方法,比如下面说到的@property、@property.setter、@property.deleter,就可以实现对私有变量的获取,修改,删除
@property
- 将被装饰方法伪装成一个数据属性,在使用的时候可以不加括号直接使用
- 注意的一点:被伪装的方法只能有self这一个参数
class A:
def __init__(self, x, y):
self.x = x
self.y = y
@property
def size(self):
return self.x * self.y
s = A(10,2)
print(s.size) # 区别就在于size加不加括号
-
@property的两个扩展应用 (装饰器)
- 用于使用修改删除定义的私有变量
-
@property.setter
@property.deleter
class A:
def __init__(self):
self.__x = 10
self.__y = 20
@property # 获取,不需要括号
def size(self):
return self.__x * self.__y
@size.setter # 修改
def size(self, t):
self.__x -= t
@size.deleter # 删除
def size(self):
del self.__x
s = A() # 定义s对象
print(s.size) # 运行size,执行__x 乘 __y
s.size = 100 # 修改 __x 减去 100
print(s.size)
del s.size # 删除__x
print(s.__dict__)