Python 動態新增例項屬性,例項方法,類屬性,類方法

build2024發表於2024-06-29

建立一個 Student 測試類,初始化時新增 nameage 例項屬性

class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
  1. 動態為 Studentxh 例項物件動態新增 例項屬性
xh = Student("小黃","20") # 例項化物件
xh.weight = 20 # 為 xh 例項物件動態新增 weight 例項屬性
  1. 動態為 Student 類物件新增動態 類屬性
Student.shcool = '大學'  # 透過類物件進行動態新增類屬性

# 透過類物件去訪問動態新增的 類屬性
print(Student.shcool)

注意:

  • 類屬性 可以透過 例項物件和類物件共同訪問
  • 例項屬性 只能透過例項物件去訪問
  1. 動態為 Studentxh 例項物件動態新增 例項方法

首先,建立一個要動態新增的 例項方法 testMethod

def testMethod(self): #self 指向為當前類的例項,必填
	print('這個是類的例項方法')

# 動態新增例項方法時,需要引入 types 庫。動態新增類方法或靜態方法則不需要引入該庫
import types

xh.printInfo=types.MethodType(testMethod,xh)# 動態繫結 xh 物件例項方法,第一個引數為要繫結的方法,第二個引數為要繫結的當前物件例項

# 呼叫動態新增的 xh 物件例項方法
xh.printInfo()
  1. 動態為 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()

注意:

  • 類方法和類屬性一樣,類方法可以由當前類物件和例項物件共同訪問
  • 例項方法和例項屬性同理,只能由當前的例項所訪問

相關文章