Python 如何确定self.attribute是否已在uuu init_uuuuu()中定义?
我想知道在一个类中,如果Python 如何确定self.attribute是否已在uuu init_uuuuu()中定义?,python,class,Python,Class,我想知道在一个类中,如果self属性是在def.\uuuuu init\uuuuuu(self)函数中定义的,是否有任何方法可以说明这一点 class C: def __init__(self): self.a = 1 self.b = 2 def __setattr__(self, name, value): if name in self.__init__: #determine whether name is defin
self
属性是在def.\uuuuu init\uuuuuu(self)
函数中定义的,是否有任何方法可以说明这一点
class C:
def __init__(self):
self.a = 1
self.b = 2
def __setattr__(self, name, value):
if name in self.__init__: #determine whether name is defined in __init__ or no?
self.__dict__["private_"+name] = value #if it is, assigned to self.__dict__ with prefixed "private_"+name as a key and value as a value.
else: #NameError is raised when assign the same name outside the class if it is already defined in self.__init__,
raise NameError
O = C()
O.a = 5 # Raise NameError, Because name "a" is defined in __init__ function inside the class C
我注意到,
self.\uuuu init.\uuuu
不能被迭代,所以我不知道我们应该如何判断\uuuu init.\uuuu
中定义了什么,name in self.\uuu init.\uuu
不起作用的原因是——正如您所注意到的——它是不适用的。这是一个函数引用
您要查找的是
hasattr(self,
。这不会专门检查属性是否已在\uuuu init\uuuu
中定义,但它会检查属性是否存在。self中的name.\uuuu init\uuu
不起作用的原因是-正如您注意到的-它不可移植。它是一个函数引用
您要查找的是
hasattr(self,
。这不会专门检查属性是否已在\uuuu init\uuuu
中定义,但会检查属性是否存在。您可以随时迭代self.\uuuu dict\uuuu
,查看当前定义的内容,但不会在发生时查看(属性可以随时添加)。你能解释一下你需要它做什么吗?因为这是不可能的,如果我们知道你想做什么,也许可以提出一些替代方案。你可以在任何时候通过self.\uuu dict\uuuu
进行迭代,查看当前定义了什么,但不是在什么时候定义的(属性可以随时添加).你能解释一下你为什么需要这个吗?因为这是不可能的,如果我们知道你想做什么,也许可以提出一些替代方案。