0

例如,如果我们喜欢:

class blah(object):
    def __new__(self, **attr):
        try: self.isBlah = attr["true_or_false"]
    def __init__(self, **attr):
        if self.isBlah:
             self.blah = self.isBlah
a = blah(true_or_false=True)
print(a.blah)

我知道__new__一个人先开始,但我们可以给它赋值吗?因为当我在 Python 解释器上执行此操作时,它不会,但在网站编译器中,它会。

4

1 回答 1

1

是的,这是可能的。传递给的第一个参数__new__是要创建其实例的类。所以为了做你想做的事,必须首先创建类实例——然后你可以在返回之前添加属性。

以下是根据您问题中的代码执行此操作的示例。请注意,在编写 Python 代码时,通常最好遵循PEP 8 - Python 代码样式指南——尤其是命名约定

class Class:
    def __new__(cls, **kwargs):
        attr = kwargs.get('true_or_false', False)
        inst = super().__new__(cls)
        inst.is_blah = attr
        return inst

    def __init__(self, **kwargs):
        if self.is_blah:
            self.blah = self.is_blah


c = Class(true_or_false=True)
print(c.blah)  # -> True
于 2020-11-18T16:29:48.827 回答