🐍 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 (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!