python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法
程序员文章站
2022-04-04 21:40:25
给对象添加实例属性,可以直接这样 t.age = 18 ( 假设 t = Test() ) 给类添加类属性 , 也可以直接这样 Test.age = 18 那给对象添加实例方法,可以在类外面先定义一个函数 然后 用 types.MethodType() 方法 把 函数绑定到对象的一个属性上面: 这个 ......
给对象添加实例属性,可以直接这样 t.age = 18 ( 假设 t = Test() ) 给类添加类属性 , 也可以直接这样 Test.age = 18
那给对象添加实例方法,可以在类外面先定义一个函数 然后 用 types.MethodType() 方法 把 函数绑定到对象的一个属性上面:
class Test(object): def __init__(self, newName): self.name = newName def printName(self): print('输出名字------%s----' %self.name) t = Test('Jack') t.printName = types.MethodType(printName, t) t.printName() >>>输出名字------Jack----
这个地方的 t.printName 其实并不是一个方法, 而是存储了 printName 函数的引用, types.MethodType() 的作用是把 函数的self 变成 t ,所以打印的是 t.name .
给类添加静态方法,也是先在外边定义一个静态方法,然后直接一个类属性指向这个静态方法就可以 :
class Test(object): def __init__(self, newName): self.name = newName @staticmethod def printName(): print('输出名字------111----') Test.printName = printName Test.printName() >>>输出名字------111----
因为静态方法一般不需要参数,所以直接一个类属性 Test.printName 指向这个静态方法就行.
同理,给类添加类方法和添加静态方法差不多:
class Test(object): a = 100 def __init__(self, newName): self.name = newName @classmethod def printName(cls): print('输出名字------%s----' % cls.a) Test.printName = printName Test.printName() >>>输出名字------100----
只不过 在调用类方法的时候会自动的把类的名字传递给后来添加上的类方法, 所以 cls.a 就是 Test.a
下一篇: Requests爬虫
推荐阅读
-
python3 面向对象__类的内置属性与方法的实例代码
-
PowerShell中调用.NET对象的静态方法、静态属性和类方法、类属性例子
-
python 类对象和实例对象动态添加方法(分享)
-
Python实现动态添加类的属性或成员函数的解决方法
-
python面向对象(继承、父类、super()、多重继承、多态、(类、实例)属性和方法)
-
python类和实例动态添加属性和方法
-
Python面向对象之静态属性、类方法与静态方法分析
-
Python特殊属性(查看类对象属性的方法)
-
python的类属性、实例属性、类方法、静态方法
-
python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法