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

  • 相关阅读:
    在Windows平台上安装Node.js及NPM模块管理
    MySQL远程访问授权
    JSON (仅限本地)
    Json 调用 天气API 实例
    JS调用腾讯接口获取天气
    jsonp 调用天气API
    兼容性
    MySql like模糊查询使用详解
    编绎报错,解决方法objc_msgSend too many arguments to function call,expected 0, have3 (转)
    OC中ARC forbids explicit message send of release错误(转)
  • 原文地址:https://www.cnblogs.com/cccy0/p/9060152.html
Copyright © 2011-2022 走看看