标签:__ 封装 price discount alex self def
class Regular(object): __discount = 1 def __init__(self,name,price): self.name = name self.__price = price def __course(self): print('AAA') def course(person): #即便你用 __course(person):类函数里这么写 _Regular__course(person):实际外部调用这么写 return person.course() #都不可以这么用做归一化设计,因为这样你就暴露了,而course()根本不可能调用到 alex = Regular('alex',100) print(alex.price) #真正获取方式是 alex._Regular__price print(alex.course()) #真正获取方式是 alex._Regular__course(person) print(Regular.discount) #真正回去方式是 _Regular__discount
不想被别人看到 上面那么做就行了
class Regular(object): __discount = 1 def __init__(self,name,price): self.name = name self.__price = price 加了双下划线的变量,只能在类的内部使用 @property #将一个函数伪装成属性 def price(self): return self.__price @price.setter def price(self,value): #改变这个变量 value是改变为的值 self.__price = value @price.deleter def price(self): #删除这个变量这么做 del self.__price alex = Regular('alex',10000) print(alex.price) alex.price = 8 print(alex.price) del alex.price print(alex.price)
这下面的调用就都跟操作属性一样,这样就是做假操作,迷乱其他人的心智
用属性代表函数上面那么做就好了,而且私有跟property一起用,但是那些函数都要同名
class A(object): __discount = 100 def __init__(self,name,price): self.name = name self.__price = price @classmethod def get_discount(cls): return cls.__discount @classmethod def change_discount(cls,value): cls.__discount = value @classmethod def del_discount(cls): del cls.__discount print(A.get_discount()) A.change_discount(300) print(A.get_discount()) A.del_discount() print(A.get_discount())
因为我们在操作静态变量时候,不需要self,传它没用啊,所以上面用了一个classmethod的装饰器,将一个对象方法,变成类方法
标签:__,封装,price,discount,alex,self,def 来源: https://www.cnblogs.com/CNHK1949/p/10623143.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。