Python动态绑定属性方法

2019-01-17  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读