中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中描述器有哪些分類

發布時間:2021-05-09 15:51:22 來源:億速云 閱讀:176 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關python中描述器有哪些分類,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Python的優點有哪些

1、簡單易用,與C/C++、Java、C# 等傳統語言相比,Python對代碼格式的要求沒有那么嚴格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺上使用;3、Python面向對象,能夠支持面向過程編程,也支持面向對象編程;4、Python是一種解釋性語言,Python寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序;5、Python功能強大,擁有的模塊眾多,基本能夠實現所有的常見功能。

1、非數據描述器

非數據描述器,只對類屬性產生作用。當訪問類屬性時,將調用描述器的__get__方法。當非數據描述器是實例的變量時,實例訪問非數據描述器不會調用__get__方法,只是訪問了描述器類的實例。

# 示例
class Student1:
    def __init__(self):
        self.course = 'Python'
        print('Student1.__init__')
 
class Student2:
    stu1 = Student1()     # Student1()返回的是Student1類的實例
 
    def __init__(self):
        print('Student2.__init__')
 
print(Student2.stu1.course)
 
# 創建Student2的實例對象
stu2 = Student2()
print(stu2.stu1.course)
 
 
# 示例:引入描述器
class Stduent1:
    def __init__(self):
        self.course = 'Python'
        print('Stduent1.__init__')
 
    def __get__(self, instance, owner):
        print('self={} instance={} owner={}'.format(self, instance, owner))
 
class Stduent2:
    stu1 = Stduent1()
    def __init__(self):
        print('Stduent2.__init__')
 
print(Stduent2.stu1.course)
# Stduent2.stu1會訪問Stduent1的實例,默認會調用__get__方法,但是__get__方法沒有將實例返回,因此,Stduent2.stu1.course會報錯
 
stu2 = Stduent2()
print(stu2.stu1.course)  # 一樣的報錯
 
 
# 示例 引入描述器
class Stduent1:
    def __init__(self):
        self.course = 'Python'
        print('Stduent1.__init__')
 
    def __get__(self, instance, owner):
        # 這里的self為Stduent1的實例. instance為實例, 如果是類訪問,那么instance為None. owner是調用者的類
        print('self={} instance={} owner={}'.format(self, instance, owner))
        return self # 返回Student1的實例self
 
class Stduent2:
    stu1 = Stduent1()
    def __init__(self):
        print('Stduent2.__init__')
 
print(Stduent2.stu1.course)
 
stu2 = Stduent2()
print(stu2.stu1.course)

2、數據描述器

數據描述器,針對類屬性和實例屬性都產生作用。當訪問或者修改此屬性時,將調用相應的__get__或者__set__方法。

# 示例1:
class Student1:
    def __init__(self):
        self.course = 'Python'
        print('Student1.__init__')
 
    def __get__(self, instance, owner):
        # 這里的self為Student1的實例. instance為實例, 如果是類訪問,那么instance為None. owner是調用者的類
        print('self={} instance={} owner={}'.format(self, instance, owner))
        return self   # 返回Student1的實例self
 
class Student2:
    stu1 = Student1()
 
    def __init__(self):
        print('Student2.__init__')
        self.y = Student1()   # 沒有調用__get__方法
 
print(Student2.stu1.course)
 
stu2 = Student2()
print(stu2.y)
 
 
# 示例,數據描述器
class Student1:
    def __init__(self):
        self.course = 'Python'
        print('Student1.__init__')
 
    def __get__(self, instance, owner):
        print('self={} instance={} owner={}'.format(self, instance, owner))
        return self
 
    def __set__(self, instance, value):
        print('self={} instance={} value={}'.format(self, instance, value))
        self.course = value
 
class Student2:
    stu1 = Student1()
 
    def __init__(self):
        print('Student2.__init__')
        self.y = Student1()   # 調用了__get__方法
 
print(Student2.stu1.course)
 
stu2 = Student2()
print(stu2.stu1)

關于python中描述器有哪些分類就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西峡县| 加查县| 景宁| 天水市| 霍州市| 兴和县| 图片| 定西市| 高唐县| 乌什县| 平安县| 诸暨市| 额敏县| 河曲县| 新田县| 油尖旺区| 义乌市| 虞城县| 海阳市| 通江县| 图木舒克市| 宝丰县| 长沙市| 平阳县| 临武县| 梁山县| 诏安县| 合肥市| 文化| 元氏县| 玉门市| 阳高县| 同心县| 恩施市| 密云县| 正镶白旗| 清水县| 长垣县| 白银市| 方山县| 郁南县|