什么是封装?
广义上(大家认为的) :
把一类事务的相同的行为和属性归到一个类中
狭义上(学术上的定论) :
把一些特殊的属性和方法藏在类中
外部无法调用,只有内部可以调用
class Dog: def bite(self):pass dog = Dog() dog.bite() # 从一个类的外部调用了bite方法 class Dog: dog_sum = 0 def __init__(self): self.count() # 从一个类的内部调用了count方法 def count(self): Dog.dog_sum += 1 alex = Dog() print(Dog.dog_sum) alex.count() # # 从一个类的外部调用了count方法 alex.count() alex.count() print(Dog.dog_sum)
隐藏静态属性
class Dog: # dog_sum = 0 # 不安全,因为这个属性可以在类的外部被随便修改 __dog_sum = 0 # 安全,通过dog_sum方法和__变量名让属性变成只能看不能改的值 def __init__(self): self.count() def count(self): Dog.__dog_sum += 1 # 可以从一个类的内部使用__dog_sum的属性 def dog_sum(self): return Dog.__dog_sum print(Dog.__dict__) alex = Dog() print(Dog.__dict__) # print(Dog.__dog_sum) # 不可以从外部直接使用这个变量 print(alex.dog_sum()) class Dog: __dog_sum = 0 # 私有的静态属性 _Dog__dog_sum def __init__(self): self.count() def dog_sum(self): return Dog.__dog_sum # 只要是在类的内部使用__名字,默认就被改成 _类名__名字 print(Dog.__dict__) print(Dog._Dog__dog_sum) # 绝不能在后续我们的代码中出现这种情况