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