• python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法


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

  • 相关阅读:
    157 判断字符串是否没有重复字符
    53 翻转字符串
    671 循环单词
    8 旋转字符串
    39 恢复旋转字符串
    6 合并排序数组 Ⅱ
    64 合并排序数组
    60 搜索插入位置
    141 x的平方根
    TCSRM 593 div2(1000)(dp)
  • 原文地址:https://www.cnblogs.com/cccy0/p/9060152.html
Copyright © 2020-2023  润新知