python-property装饰器

Python 面向对象—类

一、成员变量

类的属性类的成员变量说明(均出现在__init__初始化方法中)可见性
z公有属性全部范围可见
_y保护属性(以_ 单杠开头)同包内可见(实例点取)
__x私有属性(以__ 双杠开头)类内可见(类的方法定义中可使用self)

私有属性的暴露:python的getter和setter, 使用property函数

(1) property装饰器(可以像访问属性一样 点取 暴露私有属性的函数, 效果等同于访问私有属性)

class C(object):
    
    def __init__(self, x):
        self.__x = x
        
    @property
    def x(self):
        return self.__x
    
    # 对函数使用了property装饰器后,会产生" 函数同名.seterr " 的装饰器
    @x.setter
    def x(self, value):
        self.__x = value
        
    @x.deleter
    def x(self):
        del self.__x
    
    def __str__(self):
        return f"Private Attribute x: {self.__x}"
        
# call
if __name__ == "__main__":
    c = C("x1")
    print(c, c.x, sep=" / ")
    c.x = "x2"
    print(c, c.x, sep=" / ")
    del c.x
    # print(c)
    # 报错(慎用x.deleter装饰器, 只需知道有这个概念): AttributeError: 'C' object has no attribute '_C__x'

(2) property调用构造:

class D(object):
    
    def __init__(self, y):
        self._y = y
        
    def get_y(self):
        return self._y

    def set_y(self, v):
        self._y = v
	
    # property构造, 先get, 后set
    y = property(get_y, set_y, "Exposed Protected Attribute: y")
    
# call
if __name__ == "__main__":
    # 实例化一个类,创建一个对象,python不使用new关键字
    d = D("y1")
    print(d.y)
    d.y = "y2"
    print(d.y)

二、内置类方法:

内置方法说明
_init_(self,…)初始化对象(成员变量),在创建新对象时调用
_new_(cls,*args,**kw)在_init_()之前被调用,用于生成实例对象
_del_(self)析构函数,释放对象,对象清理
_str__(self)直接输出(print)一个对象 / java.toString()
_eq_(self, right):对象实例是否相等规则定义,默认比较对象的地址 / java.equals()
_call_(self,*args)把实例对象作为函数调用;有点回调那意思,是类留给其他接口的直接调用;
可以做的事(很多…):
(1) 可以根据参数,返回不同的类的实例 (根据不同指令产生同一对象的不同行为);
(2) 根据自身属性构造其他对象返回;

详细使用见:内置类方法示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值