我们可以在 __new__ 中分配实例属性吗?

Can we assign instance attributes in __new__?

例如,如果我们喜欢:

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 解释器上执行时,它不会,但在网站编译器中,它会。

是的,这是可能的。传递给 __new__ 的第一个参数是要创建实例的 class。因此,为了执行您想要的操作,必须首先创建 class 实例——然后您可以在返回它之前向其添加属性。

下面是根据您问题中的代码执行此操作的示例。请注意,在编写 Python 代码时,通常最好遵循 PEP 8 - Style Guide for Python Code — particularly the Naming conventions.

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