Python动态绑定属性方法

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 9,207评论 0 27
  • 定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类...
    绩重KF阅读 9,423评论 0 13
  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 5,511评论 0 6
  • 20180801贾曼三条: 1.有困难想怎么解决,办法比问题多。 所有客户都想要南向,那怎样解决客户对北向公寓选择...
    贾曼阅读 1,378评论 0 0
  • 今天排练一天本来超累超想睡觉的啊可是不到十点但我忍不住还是找了你千言万语最后只是说了一句想续小火苗儿,然后跟你说我...
    芷岦阅读 1,917评论 0 0