python動態新增屬性和方法

2021-08-09 15:45:05 字數 1581 閱讀 7524

class

person

():def

__init__

(self, name, age):

self.name = name

self.age = age

p1 = person('ff', '28')

print(p1.name, p1.age)

# 給例項物件動態新增sex屬性

p1.*** = 'female'

print(p1.***)

# 給類動態新增屬性

person.height = none

print(person.height)

p1.height = '155'

print(p1.height)

# 動態定義乙個方法

defrun

(self, speed):

print('run with %d speed' % speed)

# 給例項繫結方法

import types

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

p1.run(30)

# person.run = run # 執行錯誤 

# person.run(4)

@classmethod

defrun2

(a, speed):

print('run with %d m/s' % speed)

# 給類動態繫結方法

person.run2 = run2 # 給類繫結的方法, 需加修飾器 @classmethod, 標定其為類方法,可被類新增

person.run2(4)

p1.run2(5) # 類的例項物件也可呼叫類動態新增的方法

@staticmethod

defeat

(): print('eat---')

person.eat = eat # 類可新增靜態方法, 定義靜態方法時,需加修飾器@staticmethod

person.eat()

p1.eat() # 例項物件同樣可呼叫類動態新增的靜態方法

del p1.name # del 刪除屬性

delattr(p1, '***')

print(p1.name, p1.***)

執行結果:

female

none

155run

with

30 speed

runwith

4 m/s

runwith

5 m/s

eat---

eat---

traceback (most recent call last):

file "/home/python/desktop/test/12_動態語言.py", line 57, in

print(p1.name, p1.***)

attributeerror: 'person' object has no attribute 'name'

Python動態新增屬性和方法

動態新增屬性,就是這個屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,動態新增屬性有兩種方法,第乙個是直接通過物件名.屬性名,第二個是通過setattr新增 1 第一種 使用物件.屬性名新增 p.ageb 18 2 第二種,使用setattr函式新增 class person def in...

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...