gpt4 book ai didi

Python3 元类 : use to validate constructor argument

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:28 26 4
gpt4 key购买 nike

我计划在 Python3 中使用元类来验证构造函数参数,但似乎 __new__ 方法无法访问变量 val,因为类 A() 还没有被实例化。

Sow 正确的做法是什么?

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)

最佳答案

... it seems __new__method has no access to the variable val, because the class A() has not been instantiated yet.

没错。

So what's the correct way to do it?

不适用于元类。

元类用于摆弄类对象本身的创建,而您要做的是与类的实例相关。

最佳实践:根本不要对 val 进行类型检查。 Pythonic 代码是 duck-typed .只需记录您期望一个类似字符串的参数,然后将垃圾放入的用户将垃圾取出。

关于Python3 元类 : use to validate constructor argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com