ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

类的封装

2019-03-29 18:38:31  阅读:231  来源: 互联网

标签:__ 封装 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有