Python入门——Property

文章目录



以下内容来自于网课学习笔记。

使用的环境:

  • Window10+64位操作系统
  • PyCharm+Python3.7

一、描述符

描述符就是将某种特殊类型的类的实例指派给另一个类的属性。

特殊类型的类 必须实现以下3个函数:

  • get(self, instance, owner)
    用于访问属性,它返回属性的值。
    ◼◼ instance: 拥有者类的实例
    ◼◼ owner:拥有者类本身
  • set(self, instance, value)
    将在属性分配操作中调用,不返回任何内容
  • delete(self, instance)
    控制删除操作,不返回任何内容
class My:
    def __get__(self, instance, owner):
        print("getting···",self,instance,owner)

    def __set__(self, instance, value):
        print("setting···", self, instance, value)

    def __delete__(self, instance):
        print("deleting···", self, instance)

class Test:
    x=My()

test=Test()
# 调用get
test.x       #——————>getting··· <__main__.My object at 0x0000025D1A54DB48> <__main__.Test object at 0x0000025D1A55F1C8> <class '__main__.Test'>

# 调用set
test.x="hh"  #——————>setting··· <__main__.My object at 0x0000025D1A54DB48> <__main__.Test object at 0x0000025D1A55F1C8> hh

# 调用delete
del test.x   #——————>deleting··· <__main__.My object at 0x000001B3CF65DB08> <__main__.Test object at 0x000001B3CF66F188>

实现Property:


class MyProperty:
    def __init__(self, fget=None, fset=None, fdel=None):
        self.fget = fget
        self.fset = fset
        self.fdel = fdel

    def __get__(self, instance, owner):
        return self.fget(instance)

    def __set__(self, instance, value):
        self.fset(instance, value)

    def __delete__(self, instance):
        self.fdel(instance)


class C:
    def __init__(self):
        self._x = None

    def getX(self):
        return self._x

    def setX(self, value):
        self._x = value

    def delX(self):
        del self._x

    x = MyProperty(getX, setX, delX)


c = C()
c.x = "ff"
print(c.x)
print(c._x)

del c.x
# 属性_x被删除
print(c._x)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值