74 类与对象的动态性、混入机制

在 Python 中可以动态地为自定义类和对象增加数据成员和成员方法,这也是 Python 动态类型的一种重要体现。

import types


class Car(object):
    price = 100000  # 属于类的数据成员

    def __init__(self, c):  # 属于对象地数据成员
        self.color = c


car = Car('red')  # 实例化对象
print(car.color, car.price)  # 访问对象和类的数据成员
Car.price = 110000  # 修改类属性
Car.name = 'sky'  # 动态增加类属性
car.color = 'blue'  # 修改实例属性
print(car.color, Car.price, Car.name)


def set_speed(self, s):
    self.speed = s


car.set_speed = types.MethodType(set_speed, car)  # 动态为对象增加成员方法
car.set_speed(50)  # 调用对象的成员方法
print(car.speed)

在这里插入图片描述

Python 类型的动态性使得我们可以动态为自定义类及其对象增加新的属性和行为,俗称混入(mixin)机制,这在大型项目开开发中会非常方便和实用。例如,系统中的所有用户分类非常复杂,不同用户组具有不同的行为和权限,并且可能会经常改变。这时可以独立地定义一些行为,然后根据需要来为不同的用户设置相应的行为能力。例如,可以设计一些动作,然后根据需要把这些动作附加到相应的角色上。

import types


class Person(object):
    def __init__(self, n):
        self.name = n


def play(self):
    print(self.name + ' is playing. ')


def walk(self):
    print(self.name + ' is walking. ')


def eat(self):
    print(self.name + ' is eating. ')


danny = Person('Danny')
danny.play = types.MethodType(play, danny)  # 动态增加一个新行为
danny.play()
danny.walk = types.MethodType(walk, danny)
danny.walk()
del danny.walk  # 删除用户行为
# AttributeError: 'Person' object has no attribute 'walk'
# danny.walk()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还记得那天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值