python__高级 : 动态添加 对象属性, 类属性, 对…

2018-06-18 02:58:30来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

对象添加实例属性,可以直接这样  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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python数值计算之插值曲线拟合-01

下一篇:Python中的矩阵操作