首頁  >  文章  >  後端開發  >  python中關於類別與實例如何綁定屬性與方法的程式碼實例

python中關於類別與實例如何綁定屬性與方法的程式碼實例

黄舟
黄舟原創
2017-08-20 10:54:021632瀏覽

最近在學習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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn