面向对象
- 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派
- 对象是类的实例
类
class class_name (object):
def __init__(self):
pass
def A(self):
pass
if __name__ == "__main__":
a = class_name()
a.A()
访问可见性
- 属性私有,给属性命名时可以用两个下划线作为开头
- 不建议将属性设置为私有的,因为这会导致子类无法访问
- 遵循一种命名惯例就是让属性名以单下划线开头来表示属性是受保护的,单下划线开头的属性和方法外界仍然是可以访问的
@property装饰器
- 之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便.
class zhuangshi(object):
def __init__(self):
self.__a = 99
@property
def a(self):
return self.__a
@a.setter
def a(self,a1):
self.__a = a1
if __name__ == "__main__":
zs = zhuangshi()
zs.a = 88
print(zs.a)
__slots__
- 如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定
- __slots__的限定只对当前类的对象生效,对子类并不起任何作用
面向对象的三大支柱
class fulei(object):
def __init__(self):
self.a = 999
class zilei(fulei):
def __init__(self):
fulei.__init__(self)
pass
def A(self):
print(self.a)
if __name__ == "__main__":
fl = zilei()
fl.A()