Python练习-type 和 metaClass

本文介绍如何使用Python的Type和metaclass机制来动态创建类,并为这些类添加属性和方法。通过具体示例展示了如何利用元类实现类级别的定制化行为。

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

本部分学习用Type和metaClass动态创建类,添加属性和方法

# 使用元类 type 可以检查对象类型,也可以动态创建一个新类

class Student(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def do_study(self, value):
        print(self.name, "is studying", value)


stu2 = Student("S-Name", 18)
print(type(stu2))


def fn(self, name):
    print("Hello:", name)


MetaStu = type("MetaStu", (object,), dict(hello=fn))
meta_stu_instance = MetaStu()
meta_stu_instance.hello("Coder")


# 使用metaclass类
# 先定义metaclass,就可以创建类,最后创建实例。
# 所以,metaclass允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出来的“实例”。

# 可以通过__new__方法动态添加属性和方法
class StudentMetaClass(type):
    def __new__(cls, name, bases, attrs):
        attrs['study'] = lambda self, value: self.do_study(value)
        return type.__new__(cls, name, bases, attrs)


class MyStudent(Student, metaclass=StudentMetaClass):
    pass


my_stu = MyStudent("OneCoder", 38)
my_stu.study("Python")

输出结果如下:

<class '__main__.Student'>
Hello: Coder
OneCoder is studying Python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值