Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何确定self.attribute是否已在uuu init_uuuuu()中定义?_Python_Class - Fatal编程技术网

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
进行迭代,查看当前定义了什么,但不是在什么时候定义的(属性可以随时添加).你能解释一下你为什么需要这个吗?因为这是不可能的,如果我们知道你想做什么,也许可以提出一些替代方案。