python的类访问控制、私有属性
发布时间:2020-12-20 10:52:10 所属栏目:Python 来源:网络整理
导读:一、访问控制私有属性 ?使用双下划线开头符属性名,就是私有属性 ?私有变量的本质:类定义的时候,如果声明一个实例变量的时候,使用双下划线,python解释器会将其改名;?转换名称为_类名_变量名的名称,所以用原来的名字访问不到了 class Person: def __ini
一、访问控制私有属性
class Person: def __init__(self,name,age=19): self.name = name self.__age = age def growup(self,i=1): if i > 0 and i < 150: self.__age += 1 p1 = Person(‘tom‘) p1.growup(20) print(Person.__dict__) print(p1.__dict__) #print(p1.__age) # 不能访问 通过上面实例可以看出,外部已经访问不到__age了,age根本就没有定义,更是访问不到 通过方法来访问 如: def getage(self): return self.__age print(p1.getage())
class Person: def __init__(self,age=19): self.name = name self._age = age
3、属性装饰器
? 一般好的设计是:把实例的属性保护起来,不让外部直接访问,外部使用getter读取属性和setter方法设置属性 class Person: def __init__(self,age=19): self.name = name self.__age = age def age(self): return self.__age def set_age(self,age): self.__age = age tom = Person(‘Tom‘) print(tom.age()) tom.set_age(20) print(tom.age()) 以上通过age 和set_age方法操作属性 通过属性装饰器来实现以上代码 class Person: def __init__(self,age=19): self.name = name self.__age = age @property # 属性装饰器 def age(self): return self.__age @age.setter #更改属性 def age(self,age): self.__age = age @age.deleter def age(self): #属性删除 #def self.__age tom = Person(‘Tom‘) print(tom.age) tom.age = 20 print(tom.age) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |