美文网首页
Python动态绑定属性方法

Python动态绑定属性方法

作者: 继即鲫迹极寂寂 | 来源:发表于2019-01-17 13:16 被阅读0次

    python是动态语言,可以为实例动态绑定属性、方法,也可以为类动态绑定方法。即在用到的时候定义。为实例动态绑定的属性、方法,其它实例不可用。类绑定的方法,所有类实例都可以用。

    class Animal(object):
        def __init__(self, name, num):
            self.name = name
            self.num = num
    
        def printNum(self):
            print("%s有%s个" % (self.name, self.num))
    d = Animal("哈士奇", 88)
    

    动态给实例绑定属性

    d.width = 90 
    print(d.width) ----------> 90
    

    动态给实例绑定方法

    def setLength(self, length):
        self.length = length
    from types import MethodType
    d.setLength = MethodType(setLength, d)
    d.setLength(99)
    print(d.length) ----------> 99
    

    动态给类绑定方法

    def setColor(self, color):
        self.color = color
    Animal.setColor = setColor
    d.setColor("black")
    print(d.color) ----------> black
    

    slots

    可以限制类实例绑定属性,实例只能绑定slots指定的属性

    class Animal(object):
        __slots__ = ("name", "num")
    
    d = Animal()
    d.name = "哈士奇"
    print(d.name)
    d.color = "black" #因为__slots__没有包括"color"属性,所以不可用
    print(d.color)
    
    image.png
    slots对子类不起作用。但如果子类也定义了slots,则子类的实例属性是子类和父类的slots共同限制的。
    class Cat(Animal):
        pass
    c = Cat()
    c.color = "white"
    print(c.color)
            
    class Dog(Animal):
        __slots__ = ("legth", "width")
    dog = Dog()
    dog.color = "yellow"
    print(dog.color)
    
    image.png

    相关文章

      网友评论

          本文标题:Python动态绑定属性方法

          本文链接:https://www.haomeiwen.com/subject/nfubdqtx.html