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

2021-10-02 02:25:20 字數 2004 閱讀 8419

動態刪除屬性和方法

__slots__魔術變數

屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,我們首先定義乙個類:

class

person

(object):

""" 定義乙個人的類

"""country =

'china'

def__init__

(self,name)

: self.name = name

p = person(

'liming'

)

動態新增屬性第一種方法:

p.age =

18

第二種為使用setattr()函式新增:

setattr

(p,'age',18

)#三個引數分別為需要設定屬性的物件,屬性的名稱(字串)以及屬性的值

為了在動態新增屬性之前判斷是否已經存在了這個屬性,我們可以使用hasattr()進行判斷:

if

hasattr

(p,'age'):

#第乙個引數為物件名,第二個引數為屬性名(字串)

print

("true"

)else

:print

('false'

)#true

不是在類建立的過程中新增的方法,而是在建立完成乙個例項化物件的時候為物件新增乙個方法,需要使用types.methodtype。

import types

defrun

(self)

:print

("%s在奔跑"

% self.name)

p.run = types.methodtype(run,p)

#第乙個引數是要新增的方法,第二個引數是物件

p.run(

)#liming在奔跑

在執行過程中給類新增乙個方法。

@classmethod

defgreet

(cls)

:print

('i come from %s'

% cls.country)

person.greet = greet

person.greet(

)#i come from china

動態新增靜態方法。

@staticmethod

defsleep()

:print

('sleeping'

)person.sleep = sleep

person.sleep(

)#sleeping

刪除屬性和方法一共有兩種方式:

1.del 物件.屬性名

2. delattr(物件,『屬性名』)

del p.name

delattr

(p,'run'

)

可以用__slots__指定一些屬性名,只有被指定的屬性名同名的屬性以後才可以動態新增。

class

student

(object):

__slots__ =

('name'

,'run'

,'age'

,'country'

)#由於初始化函式中使用到了name,所以__slots__中必須新增name

def__init__

(self,name)

: self.name = name

s = student(

'xiaohong'

)setattr

(s,'age',18

)s.run = run

s.height =

170#報錯

Python是動態語言 動態新增或刪除屬性 方法

python元類 python裝飾器 python真正入門的鑑定標準 例項 class person def init self,name self.name name 定義乙個物件 mark person mark 終於修煉 了,好開森 print 報出我的大名 mark.name 直接新定義屬性...

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 第一種 使用物件.屬性名新增 p.ageb 18 2 第二種,使用setattr函式新增 class person def in...