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