最近在學習python,純粹是自己的興趣愛好,然而並沒有系統地看python程式設計書籍,覺得上面描述過於繁瑣,在網站找了一些學習的網站,下面這篇文章主要給大家介紹了關於python中類別和實例時如何綁定屬性與方法的相關資料,需要的朋友可以參考下。
前言
python類別與實例的方法的呼叫中覺得雲裡霧裡,思考之後將自己的想法記錄下,一來加深自己理解,鞏固自己記憶,而來幫助一些想要學習python的朋友理解這門抽象的語言,由於Python是動態語言,類別以及根據類別創建的實例可以任意綁定屬性以及方法,下面分別介紹。
1.類別綁定屬性
類別綁定屬性可以直接在class中定義屬性,這種屬性是類別屬。
class Student(object): name = 'Student'
這個屬性雖然歸類所有,但類別的所有實例都可以存取到。
class Student(object): name = 'Student' s = Student() # 创建实例s print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性 print(Student.name) # 打印类的name属性 Student Student
此時如果修改s.name的值,會有以下結果:
s.name = 'xiaoming' # 给实例绑定name属性 print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性 print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问 xiaoming Student
接下來刪除s.name屬性:
del s.name # 如果删除实例的name属性 print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了 Student
由此可見相同名稱的實例屬性將覆寫類別屬性,刪除實例屬性後,實例將向上存取到類別屬性。
2.實例綁定屬性
實例綁定屬性的方法有兩種,一是透過類別的self變量,二是直接給實例賦值。
class Student(object): def __init__(self, name): self.name = name s = Student('Bob')#方法一 通过类的self变量绑定属性 s.score = 90#方法二 直接赋值
3.類別綁定方法
類別綁定方法分兩種,第一種形如類別綁定屬性,程式如下:
Class Student(object): pass a=Student()#创建实例 def set_score(self,score): self.score=score Student.set_score=set_score#类绑定方法 a.set_score(99)#调用方法 a.score 99#输出
第二種是使用MethodType給類別綁定方法:
Class Student(object): pass a=Student()#创建实例 def set_score(self,score): self.score=score from types import MethodType Student.set_score = MethodType(set_score, Student) a.set_score(99)#调用方法 a.score 99#输出
這種方法有一個需要注意的地方,如果繼續建立一個實例b:
b=Student() b.set_score(60) b.score a.score 60
會發現a的屬性score值也變成60 。這裡個人的理解是這裡的score並不是同上一種方法一樣直接綁定在類,而是類似於像列表一樣的共享引用的關係,
即實例a和b都引用這個score作為自己的屬性,而當其被修改時,所有引用它的實例的對應屬性都會一同改變。
4.實例綁定方法
第一種透過給類別綁定方法,可以使實例調用,如上所示。
第二種是使用MethodType來為單一實例綁定方法。
Class Student(object): pass a=Student()#创建实例 def set_score(self,score): self.score=score from types import MethodType a.set_score = MethodType(set_score, a) a.set_score(99)#调用方法 a.score 99#输出
注意這種方式只對實例a起作用,如果需要類別Studnet的所有實例均可調用,那麼直接給予類別Student綁定方法即可。
總結
#以上是python中關於類別與實例如何綁定屬性與方法的程式碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!