建立一個 Student 測試類,初始化時新增 name 和 age 例項屬性
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
- 動態為 Student 類
xh
例項物件動態新增 例項屬性
xh = Student("小黃","20") # 例項化物件
xh.weight = 20 # 為 xh 例項物件動態新增 weight 例項屬性
- 動態為 Student 類物件新增動態 類屬性
Student.shcool = '大學' # 透過類物件進行動態新增類屬性
# 透過類物件去訪問動態新增的 類屬性
print(Student.shcool)
注意:
- 類屬性 可以透過 例項物件和類物件共同訪問
- 例項屬性 只能透過例項物件去訪問
- 動態為 Student 類
xh
例項物件動態新增 例項方法
首先,建立一個要動態新增的 例項方法 testMethod
def testMethod(self): #self 指向為當前類的例項,必填
print('這個是類的例項方法')
# 動態新增例項方法時,需要引入 types 庫。動態新增類方法或靜態方法則不需要引入該庫
import types
xh.printInfo=types.MethodType(testMethod,xh)# 動態繫結 xh 物件例項方法,第一個引數為要繫結的方法,第二個引數為要繫結的當前物件例項
# 呼叫動態新增的 xh 物件例項方法
xh.printInfo()
- 動態為 Student 類物件動態新增 類方法和靜態方法
建立類方法和靜態方法,分別需要使用修飾符 @classmethod 和 @staticmethod
# 建立類方法
@classmethod
def test1Method(cls): # 類方法第一個引數 cls 必填,指向為當前 Student 類物件。可以透過當前物件去訪問到類的屬性和方法,但不能訪問類的例項屬性和例項方法。因為例項屬性和例項方法只有例項物件能訪問。
print("這個是類方法")
@staticmethod
def test2Method(): #靜態方法,引數可有可無
print("這個是靜態方法")
# 給當前 Student 類物件,動態新增類方法
Student.test1=test1Method
# 呼叫動態新增的類方法
Student.test1()
# 給當前 Student 類物件,動態新增靜態方法
Student.test2=test2Method
# 呼叫動態新增的靜態方法
Student.test1()
注意:
- 類方法和類屬性一樣,類方法可以由當前類物件和例項物件共同訪問
- 例項方法和例項屬性同理,只能由當前的例項所訪問