python 動態繫結屬性方法

2021-09-14 00:05:25 字數 1573 閱讀 8033

import types

# 定義類

class person(object):

num = 0

def __init__(self, name, age=none):

self.name = name

self.age = age

def eat(self):

print('eat food')

# 定義例項方法

def run(self, speed):

print("{} 在移動,速度是{}".format(self.name, speed))

# 定義類方法

@classmethod

def testclass(cls):

cls.num = 100

# 定義靜態方法

@staticmethod

def teststatic():

print('--static method--')

# 建立例項

p = person('老王', 24)

# 呼叫在class中的方法

p.eat()

# 給這個物件新增例項方法

# 錯誤寫法:

# p.run = run(180) #typeerror: run() missing 1 required positional argument: 'speed'

# 正確寫法, 可以直接給這個類綁上方法, 或者是用types.methodtype(run, p)給例項綁上方法

# person.run = run

# p2 = person('小李', 25)

# p2.eat()

# p2.run(30)

# p3 = person('校長', 30)

# p3.run(300)

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

p.run(180)

# 給person 類繫結類方法

person.testclass = testclass

# 呼叫類方法

print(person.num)

person.testclass() # 後面都修改了

print(person.num)

p2 = person('lili', 22)

print(p2.num)

# 給person 繫結靜態方法

person.teststatic = teststatic

person.teststatic()

## 執行的過程中刪除屬性、方法

# 刪除的方法:

# # del 物件.屬性名

# delattr(物件, 「屬性名」)

# 通過以上例子可以得出乙個結論:相對於動態語言,靜態語言具有嚴謹性!所以,玩動態語言的時候,小心動態的坑!

## 那麼怎麼避免這種情況呢? 請使用slots,

eat food

老王 在移動,速度是180

0100

100--static method--

Python動態繫結屬性和方法

當我們定義了乙個 class,建立了乙個 class 的例項後,我們可以給該例項繫結任何屬性和方法,也可以給類繫結任何屬性和方法,這就是動態語言的靈活性。給例項繫結屬性和方法,每個例項之間新增的部分是互不干擾的。1.先來看乙個方法 methodtype 如果我們在模組中定義乙個方法,而不是在類中定義...

python 動態繫結屬性與方法

動態繫結屬性與方法的意思就是在本沒有這個屬性與方法的例項物件中新增這個屬性與方法。具體操作如下 class stduent def init self,name,age self.name name self.age age defeat self print self.name 正在吃飯 std1...

動態繫結屬性

動態繫結屬性 dict 先看下面的 class a def init self,a,b,c,d,e self.a a self.b b self.c c self.d d self.e e p1 a 1,2,3,4,5 print dir p1 class delattr dict dir doc ...