**Python基础知识:类的动态添加方法
*类中有三种方法,实例方法,静态方法和类方法,三种方法的区别如下:
3.1 添加实例方法
复制代码
import types
class Person(object):
def init(self, newName, newAge):
self.name = newName
self.age = newAge
def eat(self):
print("---正在吃---")
def run(self):
print("—正在跑—")
zhangsan = Person(“张三”, 18)
zhangsan.eat() # —正在吃—
zhangsan.run = types.MethodType(run, zhangsan) # 类对象zhangsan动态添加对象方法run()
zhangsan.run() # —正在跑—
lisi = Person(“李四”, 28)
lisi.eat() # —正在吃—
lisi.run() # ‘Person’ object has no attribute ‘run’
复制代码
由以上代码可知,Person类有一个方法:eat()方法。通过[types.MethodType(方法名, 对象名)]给类对象zhangsan动态添加了对象方法run(),同理,Person的另一个类对象lisi不能调用这个方法
注:通过对象名添加的对象方法,只有这个对象能使用
3.2 添加静态方法
复制代码
class Person(object):
def init(self, newName, newAge):
self.name = newName
self.age = newAge
def eat(self):
print("---正在吃---")
@staticmethod
def staticRun():
print("—正在跑—")
Person.staticRun = staticRun # 类Person动态添加静态方法staticRun()
Person.staticRun() # —正在跑—
zhangsan = Person(“张三”, 18)
zhangsan.eat() # —正在吃—
zhangsan.staticRun() # —正在跑—
lisi = Person(“李四”, 28)
lisi.eat() # —正在吃—
lisi.staticRun() # —正在跑—
复制代码
由以上代码可知,通过[类名.静态方法名]给类Person动态添加了静态方法staticRun(),Person类的Person的类对象zhangsan和lisi都能调用这个方法
注:通过类名添加的静态方法,这个类及这个类的所有对象都能使用
3.3 添加类方法
复制代码
class Person(object):
def init(self, newName, newAge):
self.name = newName
self.age = newAge
def eat(self):
print("---正在吃---")
@classmethod
def classRun(cls):
print("—正在跑—")
Person.classRun = classRun # 类Person动态添加类方法classRun()
Person.classRun() # —正在跑—
zhangsan = Person(“张三”, 18)
zhangsan.eat() # —正在吃—
zhangsan.classRun() # —正在跑—
lisi = Person(“李四”, 28)
lisi.eat() # —正在吃—
lisi.classRun() # —正在跑—
复制代码
由以上代码可知,通过[类名.类方法名]给类Person动态添加了类方法classRun(),Person类的Person的类对象zhangsan和lisi都能调用这个方法
注:通过类名添加的类方法,这个类及这个类的所有对象都能使用