我本来打算用元类来验证Python3中的构造函数参数,但似乎__new__
方法无法访问变量val
,因为类{
播种正确的方法是什么?在
class MyMeta(type):
def __new__(cls, clsname, superclasses, attributedict):
print("clsname: ", clsname)
print("superclasses: ", superclasses)
print("attributedict: ", attributedict)
return type.__new__(cls, clsname, superclasses, attributedict)
class A(metaclass=MyMeta):
def __init__(self, val):
self.val = val
A(123)
wim is absolutely correct that this isn't a good use of metaclasses,但这当然是可能的(而且也很简单)。在
考虑如何创建类的新实例。你这样做:
换句话说:通过调用类来创建实例。python允许我们通过定义^{} method 来创建定制的可调用对象。所以我们要做的就是在元类中实现一个合适的
^{pr2}$__call__
方法:就这样。很简单,对吧?在
没错。在
不用元类。在
元类用于修改类对象本身的创建,您要做的是与类的实例相关。在
最佳实践:根本不要键入检查
val
。python代码是duck-typed。只需记录您所期望的类似字符串的参数,将垃圾放入的用户将得到垃圾输出。在相关问题 更多 >
编程相关推荐