Python 第十七天学习笔记

调缩进:ctrl + [     左

             ctrl + ]     右



属性访问

property()  可以用属性去访问属性?什么意思。。。


>>> class C:
def __getattribute__(self,name):
print("getattribute")
return super().__getattribute__(name)
def __getattr__(self,name):
print("getattr")
def __setattr__(self,name,value):
print("setattr")
super().__setattr__(name,value)
def __delattr__(self,name):
print("delattr")
super().__delattr__(name)

>>> c = C()
>>> c.x
getattribute                  因为c没有定义属性,所以操作c.x时,第一个返回的是getattribute,一旦访问属性,就自动弹出
getattr                          c没有属性,当操作c.x时,会返回getattr (用户试图获取不存在属性时弹出)
>>> c.x=1                    赋值,所以会触动setattr
setattr
>>> c.x                        当调用属性时,会自动弹出getattribute,因为已经有属性了,所以getattr就不弹出了
getattribute
1
>>> del c.x                  当删除属性时,会弹出delattr
delattr
>>> 

当使用属性时,要格外小心死循环。


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



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):
self.fget(instance)
def __set__(self,instance,value):
self.fset(instance,value)
def __del__(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):
delete self._x

x= Myproperty(getX,setX,delX)


练习:

先定义一个温度类,然后定义两个描述符类用于描述摄氏度和华氏度两个属性。两个属性自动转换

class Sheshidu:
    def __init__(self,value=26.0):                          定义摄氏度,初始温度为26度
        self.value = float(value)
    def __get__(self,instance,owner):                    
        return self.value
    def __set__(self,instance,value):
        self.value = float(value)

class Huashidu:                                                 定义华氏度
    def __get__(self,instance,owner):
        return instance.ssd * 1.8 + 32                    instance是实例化对象
    def __set__(self,instance,value):
        instance.ssd = (folat(value)-32) / 1.8 

class Temperature:                                              定义温度
    ssd = Sheshidu()                                             摄氏度
    hsd = Huashidu()                                            华氏度


第46个视频的课后习题


1 描述符类中,分别通过哪些魔法方法来实现对属性的get、set、delete 操作的

__get__(self,instance,owner)   用于访问属性,它返回属性的值

__set__(self,instance,value)     将在属性分配操作时调用,不返回任何内容

__delete__(self,instance)         控制删除操作,不返回任何内容


这节学的有点糟,后续再回看



继续学习定制序列:



看了一晚上,眼睛都快瞎了啊喂。。


下次看迭代器


猜你喜欢

转载自blog.csdn.net/weixin_41151172/article/details/79995103