博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法...
阅读量:6495 次
发布时间:2019-06-24

本文共 1131 字,大约阅读时间需要 3 分钟。

对象添加实例属性,可以直接这样  t.age = 18   ( 假设 t = Test() )  给类添加类属性 , 也可以直接这样  Test.age = 18

给对象添加实例方法,可以在类外面先定义一个函数 然后 用 types.MethodType() 方法 把 函数绑定到对象的一个属性上面:

class Test(object):    def __init__(self, newName):        self.name = newNamedef 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@staticmethoddef printName():    print('输出名字------111----')Test.printName = printNameTest.printName()>>>输出名字------111----

因为静态方法一般不需要参数,所以直接一个类属性 Test.printName 指向这个静态方法就行.

同理,给类添加类方法和添加静态方法差不多:

class Test(object):    a = 100    def __init__(self, newName):        self.name = newName@classmethoddef printName(cls):    print('输出名字------%s----' % cls.a)Test.printName = printNameTest.printName()>>>输出名字------100----

只不过 在调用类方法的时候会自动的把类的名字传递给后来添加上的类方法, 所以 cls.a 就是 Test.a

转载于:https://www.cnblogs.com/cccy0/p/9060152.html

你可能感兴趣的文章
归一化变换 Normalizing transformations
查看>>
无限分类
查看>>
【Big Data】HADOOP集群的配置(一)
查看>>
IE的安全性设定增加“我的电脑”的安全性设定
查看>>
[na]pc加入域认证细节
查看>>
ECHO.js 纯javascript轻量级延迟加载
查看>>
HTTP头部信息解释分析(详细整理)
查看>>
【面试】重建二叉树
查看>>
Atitit.提升 升级类库框架后的api代码兼容性设计指南
查看>>
在 Linux 中查看时区
查看>>
代码解说Android Scroller、VelocityTracker
查看>>
【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统
查看>>
unity3d教程运行物理机制
查看>>
shiro整合oauth
查看>>
Hibernate获取数据java.lang.StackOverflowError
查看>>
(转)如何修改maven的默认jdk版本
查看>>
Django模板过滤器详解
查看>>
流感下的北京中年 引发的消费型保险相关干货资料收集整理
查看>>
SnackbarUtilDemo【Snackbar的封装类】
查看>>
IOS上传图片的方法
查看>>