python面向对象--》动态添加方法

本文介绍了如何在Python中为类实例动态添加属性和方法,包括直接通过实例或类对象进行绑定,使用类型(type)创建新的类,以及利用types模块为特定实例添加方法等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Person(object):
    name = "xiaoMing"

    def __init__(self):
        self.name = "hhh"
        self.age = "hehehe"

    def show(self):
        print("My name is %s,age is %s,height is %d" % (self.name, self.age, self.height))


xiaoMing = Person()
# 原来没有实例变量self。height,我们根据程序需要动态添加这个变量
# xiaoMing.height = 180
Person.height = 180
xiaoMing.show()

# del Person.height

xiaoHong = Person()
xiaoHong.show()

# help(Person)
"""
> **总结:**<br/>
运行中给对象绑定属性-----》直接通过实例对象设置<br/>
运行中给类绑定属性-----》直接通过类对象设置<br/>
"""


def run(self):
    print("正常人跑步的速度可以在10公里每小时,短距离可以达到36公里每小时")


# 使用实例对象直接添加方法-----》失败
# xiaoHong.run = run
# xiaoHong.run()

# help(xiaoHong)

# 使用类对象添加普通方法----》成功
Person.run = run
xiaoHong.run()


# help(Person)


# 使用类对象添加静态方法----》成功
@staticmethod
def study():
    print("I love Study:Study is a beauty")


Person.study = study


# help(Person)


# 使用类对象添加类方法----》成功
@classmethod
def play_game(cls):
    print("wo xi huan wan you xi")


Person.play_game = play_game
help(Person)


# 使用type,继承原来的类,同时再添加方法
def sleep(self):
    print("我每天睡眠时间大概6个小时")


Person = type("Person", (Person,), {"sleep": sleep})
help(Person)

# 创建对象,使用的是离得近的Person
xiaoHua = Person()
# 自己的sleep方法
xiaoHua.sleep()
# 父类的show方法
xiaoHua.show()
import types

# 动态删除自己的方法---》成功
del Person.sleep
# xiaoHua.sleep()
print("*" * 30)
# 动态删除父类的方法 -->失败
# del Person.show
print("*" * 30)
help(Person)


class Cat:
    def __init__(self):
        self.name = "Tom"
        self.age = 3

    def show(self):
        print("name:%s,age:%d" % (self.name, self.age))


tom = Cat()
tom.show()


def catch_mouse(self):
    print("猫捉老鼠")


# 使用types完成上节课未完成的事业
tom.catch_mouse = types.MethodType(catch_mouse, tom)
tom.catch_mouse()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值