zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java 学习之JVM深入分析(一)
    选择排序算法实现十个1100的随机数的排序
    spring基础知识概述
    mybatis 总结一
    ACM之java判断回文数
    Spring mvc框架
    C#实现窗体最小化到状态栏,双击运行时又能正常显示窗体
    Android调用相机并将照片存储到SD卡上实现方法
    c#中如何让一个窗体在另一个旁边
    C#实现获取时间
  • 原文地址:https://www.cnblogs.com/cccy0/p/9060152.html
Copyright © 2011-2022 走看看