OneCoder Avatar
OneCodercoderli.com · 959 篇博文
🐍 Python

Python 与大数据

MySQL、Hadoop、自动化与基础工具

🎨 视觉封面

Python练习-type 和 metaClass

📅 2022-08-10·✍️ onecode·计算中...·⏱️ 3 分钟
#Python

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

Python 41 行
# 使用元类 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")

输出如下:

Code 3 行
<class '__main__.Student'>
Hello: Coder
OneCoder is studying Python
💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

读者讨论与留言

0 条讨论
✨ 支持点击留言直接回复 · Markdown 引用格式
💬 还没有读者留言,快来成为第一个讨论者吧!