Python動態新增屬性和方法

2021-09-26 07:49:51 字數 1734 閱讀 2628

動態新增屬性,就是這個屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,動態新增屬性有兩種方法,第乙個是直接通過物件名.屬性名,第二個是通過setattr新增:

1、第一種:使用物件.屬性名新增:

p.ageb= 18

2、第二種,使用setattr函式新增:

class person:

def __init__(self, name):

self.name = name

p = person('lyc')

p.age = 18

if not hasattr(p, 』***』):

setattr(p, '***', 'male')

print(p.***)

· 動態新增方法

動態新增例項方法:

動態新增方法,意思是方法不是在類定義的時候新增的。而是建立完這個物件後,在執行的時候新增的。如果想要在執行的時候新增方法,這時候就應該使用到types.methodtype這個方法了,示例:

import types

class person:

def __init__(self, name):

self.name = name

def run(self):

print('%s run func' % self.name)

p1 = person('lyc')

p1.run = types.methodtype(run, p1) #這裡p1為run方法的引數, 即self

p1.run()

動態新增類方法:

新增類方法,是把這個方法新增給類。因此新增類方法的時候不是給物件新增,而是給類新增。並且新增類方法的時候不需要使用types.methodtype,直接將這個函式賦值給類就可以了,但是需要使用classmethod裝飾器將這個方法設定為乙個類方法。

@classmethod

def show(cls):

print('這是類方法')

person.show = show

person.show()

動態新增靜態方法:

@classmethod

def show(cls):

print('這是類方法')

person.show = show

person.show()

· 動態刪除屬性和方法

1、del 物件.屬性名

print(p1.name)

del p1.name

print(p1.name)

2、delattr(物件,「屬性名」)

print(p1.name)

del p1.name

print(p1.name)

魔術方法__slots__:

使用__slots__來指定類中允許新增的屬性,如下只能新增 name,和age這兩個屬性

class person:

__slots__ = ('name', 'age')

def __init__(self, name):

self.name = name

p2 = person('lyc')

p2.age = 18

print(p2.age)

#下邊**會報錯

p2.country = 'zh'

python動態新增屬性和方法

class person def init self,name,age self.name name self.age age p1 person ff 28 print p1.name,p1.age 給例項物件動態新增 屬性 p1.female print p1.給類動態新增屬性 person.h...

python中動態新增屬性和方法

動態新增屬性 就是這個屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,動態新增屬性有兩種方法,第乙個是直接通過物件名.屬性名,第二個是通過setattr新增 1.物件.屬性 class person object def init self,name self.name name p pe...

python動態新增 刪除屬性和方法

動態刪除屬性和方法 slots 魔術變數 屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,我們首先定義乙個類 class person object 定義乙個人的類 country china def init self,name self.name name p person limin...