什么是封装?
广义上(大家认为的) :
把一类事务的相同的行为和属性归到一个类中
狭义上(学术上的定论) :
把一些特殊的属性和方法藏在类中
外部无法调用,只有内部可以调用
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) # 绝不能在后续我们的代码中出现这种情况