Python入门——Property
程序员文章站
2022-05-08 09:26:05
...
文章目录
以下内容来自于网课学习笔记。
使用的环境:
- 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)