python是動態(tài)語言萧恕,可以為實例動態(tài)綁定屬性刚梭、方法,也可以為類動態(tài)綁定方法票唆。即在用到的時候定義朴读。為實例動態(tài)綁定的屬性、方法走趋,其它實例不可用衅金。類綁定的方法,所有類實例都可以用簿煌。
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)
動態(tài)給實例綁定屬性
d.width = 90
print(d.width) ----------> 90
動態(tài)給實例綁定方法
def setLength(self, length):
self.length = length
from types import MethodType
d.setLength = MethodType(setLength, d)
d.setLength(99)
print(d.length) ----------> 99
動態(tài)給類綁定方法
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