zoukankan      html  css  js  c++  java
  • day_5.26python动态添加属性和方法

    python动态添加属性和方法

    既然给类添加⽅法,是使⽤ 类名.⽅法名 = xxxx ,那么给对象添加⼀个⽅法 也是类似的 对象.⽅法名 = xxx

    '''
    2018-5-26 13:40:09
    python动态添加属性以及方法
    不用在程序大体变化情况下,实现改变功能
    '''
    import types
    # 动态添加属性
    class Person(object):
    def __init__(self,newName,newAge):
    self.name= newName
    self.age = newAge
    # laowang = Person("老王",10000)
    # print(laowang.name)
    # print(laowang.age)
    # laowang.addr = "北京....." #对象添加属性
    # print(laowang.addr)
    # laozhao = Person("老赵",18)
    # # print(langzhao.addr)
    # # Person.num =100
    # #类添加属性
    # print(laozhao.num)

    # 动态添加方法
    class Person2(object):
    def __init__(self,newName,newAge):
    self.name = newName
    self.age = newAge
    def eat(self):
    print(".............%s正在吃"%self.name)

    def run(self):
    print("------正在跑%s-------"%self.name)
    p1 = Person2("p1",10)
    p1.eat()
    # 虽然p1对象中run属性已经指向了 def run这个函数,,,但是这句代码还不正确
    #因为run属性指向的函数,是后来添加的,几 p1.run()的时候,并没有把p1挡做第
    #1个参数,导致了第10行的函数调用的时候,出现缺少参数的问题

    #把实例方法绑到了对象那个身上
    p1.run = types.MethodType(run,p1)
    p1.run()
    #类方法,静态方法修改 其他的都是绑类身上 方法是给类添加的
    @staticmethod
    def test():
    print("------这是一个静态方法____")
    Person2.test =test
    Person2.test()
    # 动态修改类方法
    @classmethod
    def printNum(cls):
    print("-------这是一个类方法-----")
    Person2.printNum = printNum
    Person2.printNum()

    #__slots__的使用!
    class Person3(object):
    # 只允许添加一下类型的属性,不能随便添加
    __slots__ = ("name","age")

    p =Person3()
    p.name ="老王"
    p.age = 10
     

      

  • 相关阅读:
    Linux性能调优
    Linux动态库搜索路径的技巧
    [转]Linux动态库的种种要点
    [转]谈谈Linux下动态库查找路径的问题
    性能测试的几种业务模型设计
    性能测试解惑之并发压力
    一个系统的最大并发用户数为1100,怎么能推算出该系统的支持最大用户数
    IP欺骗
    关于Cocos2d-x随机数的生成
    关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置
  • 原文地址:https://www.cnblogs.com/zhen1996/p/9093002.html
Copyright © 2011-2022 走看看