面向对象的三大特征:封装,继承以及多态
私有化: self.__age
def __init__(self,age):
self.__age = age
@property功能:可以将函数转为属性来进行调用。
将@property添加给getter头上,将getter变成一个属性来进行调用
与此同时,@property还会生成一个新的装饰器,这个装饰器的名字叫做
@属性.setter的装饰器,这个装饰器可以将setter方法变为属性赋值。
优点:方便调用者写出更加简洁的代码。
def __init__(self,age):
self.__age = age
#语法糖(可将函数转为属性来进行调用)
@property # getter方法
def age(self):
return self.__age
#前面一定要有getter方法,因为这是语法糖-@property产生的一个新的装饰器:@属性.setter
@age.setter
def age(self,age):
if age < 0 or age > 160:
print("超出年龄范围")
else:
self.__age = age
为什么外部无法访问私有变量?
self.__age = age
class Father():
def __init__(self,name,money):
#成员变量
self.name = name
#私有变量
self.__money = money
if __name__ == '__main__':
#实例化
fa = Father("马爸爸",100)
#黑魔法(不推荐使用)
print(fa._Father__money)
__foo__ 首尾双下划线,这个定义的时候使用,自己定义变量的时候也不报错。
__foo 首双下划线,私有类型,访问范围,在类本身可以访问
_foo 首单下划线,保护类型的,虽然可以直接访问,但是建议将视为私有变量来进行访问。