gpt4 book ai didi

详解Python魔法方法之描述符类

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解Python魔法方法之描述符类由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

描述符类要求:

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

至少要实现以下的一个方法:

?
1
2
3
4
5
6
7
8
•__get__( self , instance, owner)
–用于访问属性,它返回属性的值
 
•__set__( self , instance, value)
–将在属性分配操作中调用,不返回任何内容
 
•__delete__( self , instance)
–控制删除操作,不返回任何内容

eg:

?
1
2
3
4
5
6
7
8
9
>>> class mydecriptor:
     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 = mydecriptor()   #取mydecriptor类的实例指派给test类的属性x

测试:

详解Python魔法方法之描述符类

eg:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
>>> 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 = "hellow"
>>> c.x
'hellow'
>>> c._x
'hellow'
>>> del c.x
>>> c._x

eg:

摄氏度转华氏度:华氏度=摄氏度*1.8+32 。

要求:

•先定义一个温度类,然后定义两个描述符类用于描述摄氏度和华氏度两个属性。 •要求两个属性会自动进行转换,也就是说你可以给摄氏度这个属性赋值,然后打印的华氏度属性是自动转换后的结果.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ss celsius:  #摄氏度描述符类
     def __init__( self ,value = 26.0 ): #self为描述符类自身(此为摄氏度描述符类)的实例(此为cel)
         self .value = float (value)
     def __get__( self ,instance,owner): #instance是这个描述符的拥有者所在的类的实例(此为temp)
         return self .value
     def __set__( self ,instance,value): #owner是这个描述符的拥有者所在的类本身(此为温度类)
         self .value = float (value)
 
class fahrenheit:   #华氏度描述符类
     def __get__( self ,instance,owner):
         return instance.cel * 1.8 + 32  #摄氏度转华氏度
     def __set__( self ,instance,value):
         instance.cel = (( float )(value) - 32 ) / 1.8
         ## instance.cel 则会执行temperature.cel,接着执行celsius类中的__set__方法
        
class temperature:   #温度类
     cel = celsius()   #设置摄氏度属性(描述符类的实例指派给了温度类的属性)
     fah = fahrenheit() # temp.fah ,当属性fah被赋值的时候,则会执行fahrenheit描述符类的__set__方法
                        
>>> temp = temperature()
>>> temp.cel
26.0
>>> temp.fah
78.80000000000001
>>> temp.fah = 78.8
>>> temp.cel
25.999999999999996

到此这篇关于详解python魔法方法之描述符类的文章就介绍到这了,更多相关python描述符类内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/u011436427/article/details/117231948 。

最后此篇关于详解Python魔法方法之描述符类的文章就讲到这里了,如果你想了解更多关于详解Python魔法方法之描述符类的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com