实现python的静态成员 与 property()的理解

实现python的静态成员 与 property()的理解

静态变量的声明与调用

“静态”变量的声明
这里的静态变量是借用Java中静态变量的概念(不知道Python中的具体概念是什么),指既可以通过类名直接进行访问,也可以通过类的实例进行访问的变量。这种变量的声明很简单,直接在类代码块中设置变量即可,不需要任何关键字
Java中这样声明的变量是实例变量,只能通过对象实例进行访问
class Test:
#这是一个“静态”变量
className = “Test”

# 静态成员变量

class Apple(object):
    eaten_by = []
    
    def __init__(self):
        pass
    
    def eaten(self,str):
        print(f'{str} is eating')
        Apple.eaten_by.append(str)
        
apple1 = Apple()
apple2 = Apple()
apple3 = Apple()
apple1.eaten('Henry')
apple2.eaten('Tom')
apple2.eaten('Kristin')
del apple1 
del apple2
del apple3
print(Apple.eaten_by)    

property()

property()是装饰器的变型。设计它的主要初衷是为了防止外部直接调用类中的变量,破坏了封装性。因此计划让外界改变“中介变量”,也就是被赋值为property()的变量。他的get,set和del都会导致类内变量的改变,具体改变方式则通过传入property()的函数类型实参决定。同时把类内成员变量设为private,这样就可以限制外部随意调用类内成员变量啦。

# 测试property()的装饰器作用
# 测试property()对改善封装性的作用

# 通过一个隐藏的变量(property类型)作为中介实现类间消息传输,改变成员变量等等。

class Person():
    def __init__(self):
        self.__drive = False
        self.__car = ''
        self.__client_name = ''
        
    def setINFO_client(self,info):
        print('SET!!!')
        self.__car = info[0]
        self.__client_name = info[1]
        self.__drive = info[2]
        self.description()
    
    
    def getINFO_client(self):
        print('GET!!!')
        self.description()
        return self.__car,self.__client_name,self.__drive
    
    def description(self):
        if self.__drive == False:
            print('nobody drives you')
        else:
            print('client {} drives you with car of {}'.format(self.__client_name,self.__car))
    info = property(getINFO_client,setINFO_client)
    
p = Person()
p.info = ('Benz','Henry',True) 
print(p.info)
        
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值