魔法方法——属性访问(含特性的解析)

读书笔记:
attribute 是属性的意思,property是特性的意思。
Part A
处理属性的内置函数(BIF):
dir([object]):列出对象 的大多数属性
getattr(object,name[,default]):从对象中获取name字符串对应的属性
hasattr(object,name):如果对象存在指定的属性,返回True
setattr(object,name,value):将对象指定属性的值设为value,可能创建一个新属性,或覆盖现有的属性
vars([object]):返回对象的dict属性

Part B
处理属性的特殊方法:

__getattribute__(self,name)
__getattr__(self,name)
__setattr__(self,name,value)
__delattr__(self,name)
__dir__(self)

Part C
特性property的应用

>>> class C:
    def __init__(self,size = 10):
        self.size = size
    def getSize(self):
        return self.size
    def setSize(self,value):
        self.size = value
    def delSize(self):
        del self.size
    p = property(getSize,setSize,delSize)

>>> c = C()
>>> c.p
10
>>> c.p = 1
>>> c.p
1
>>> c.size
1
>>> del c.p
>>> c.size
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    c.size
AttributeError: 'C' object has no attribute 'size'

这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述

第0题 改写getattr

>>> class C:
    def __getattr__(self,name):
        print("该属性不存在!")

>>> c = C()
>>> c.x
该属性不存在!

第1题 改写getattr

当对象name属性不存在时,调用__getattr__(self,name);
给name属性赋值,并返回该值;
>>> class Demo:

    def __getattr__(self,name):
        self.name = "this is a sign"
        return self.name
    #以下不需要重写
    #def __setattr__(self,name,value):
        #super().__setattr__(name,value)
    #def __getattribute__(self,name):
        #super().__getattribute__(name)

>>> demo = Demo()
>>> demo.x
'this is a sign'
>>> demo.x = 1
>>> demo.x
1
>>> demo.x = "X-man"
>>> demo.x
'X-man'

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值