您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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中描述器有哪些分類就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。