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

  • 相关阅读:
    移动端字体单位
    我像素的理解
    了解viewport概念
    移动端知识
    本地存储和会话存储
    一屏滚动滚轮事件
    关于jquery的笔记
    关于bind()方法
    [css] 滚动条样式问题
    [element-ui] 表格功能实现(删除选中)
  • 原文地址:https://www.cnblogs.com/cccy0/p/9060152.html
Copyright © 2011-2022 走看看