Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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能告诉我在当前块中定义了类的哪些属性吗?_Python - Fatal编程技术网

python能告诉我在当前块中定义了类的哪些属性吗?

python能告诉我在当前块中定义了类的哪些属性吗?,python,Python,例如,类声明: class Something(Superclass): an_attribute = 1 another_attribute = 'hello' python有没有办法告诉我在这个类声明中定义了一个_属性和另一个_属性 我想,构建这个问题的另一种方式是,我可以按声明dir结果的类过滤dir结果吗?类的属性保存在其特殊的dict字段中。_u dict_uu仅包含为当前类定义的属性以及特殊属性。正如其他人提到的,它可以直接访问,也可以通过内置的vars函数访问 我

例如,类声明:

class Something(Superclass):
    an_attribute = 1
    another_attribute = 'hello'
python有没有办法告诉我在这个类声明中定义了一个_属性和另一个_属性


我想,构建这个问题的另一种方式是,我可以按声明dir结果的类过滤dir结果吗?

类的属性保存在其特殊的dict字段中。_u dict_uu仅包含为当前类定义的属性以及特殊属性。正如其他人提到的,它可以直接访问,也可以通过内置的vars函数访问


我强烈推荐阅读这篇文章,它深入解释了Python如何处理属性

类的属性保存在其特殊的dict字段中。_u dict_uu仅包含为当前类定义的属性以及特殊属性。正如其他人提到的,它可以直接访问,也可以通过内置的vars函数访问

我强烈推荐阅读这篇文章,它深入解释了Python如何处理属性

Python 2.7:

Python 3:

Python 2.7:

Python 3:


可以通过varsSomeThing访问类SomeThing的属性字典。另请参见。

类的属性字典。可以通过varsSomeThing访问SomeThing。另请参见。

有内置的hasattr函数

如果字符串是对象属性之一的名称,则结果为True,否则为False。这是通过调用getattrobject、name并查看它是否引发异常来实现的。

有内置的hasattr函数

>>> class Something(list):
...     an_attribute = 1
...     another_attribute = 'hello'
... 
>>> print vars(Something) == Something.__dict__
True
>>> 
>>> print vars(Something)
{'__module__': '__main__', '__doc__': None, 'an_attribute': 1, '__dict__': <attribute '__dict__' of 'Something' objects>, '__weakref__': <attribute '__weakref__' of 'Something' objects>, 'another_attribute': 'hello'}
>>> 

如果字符串是对象属性之一的名称,则结果为True,否则为False。这是通过调用getattrobject、name并查看它是否引发异常来实现的。

另一种方法是使用@AshwiniChaudhary的示例:

>>> class Something(list):
...     an_attribute = 1
...     another_attribute = 'hello'
... 
>>> print vars(Something) == Something.__dict__
True
>>> 
>>> print vars(Something)
{'__module__': '__main__', '__doc__': None, 'an_attribute': 1, '__dict__': <attribute '__dict__' of 'Something' objects>, '__weakref__': <attribute '__weakref__' of 'Something' objects>, 'another_attribute': 'hello'}
>>> 
import inspect

class A:
    var1 = 2
    var2 = 2

class B(A):
    var3 = 3
    var4 = 4

[member for member in inspect.getmembers(B) if member not in inspect.getmembers(A)]
#prints [('var3', 3), ('var4', 4)]
使用此方法,您可以决定从继承层次结构中的哪个类中减去成员,例如:

class One:
    #members

class Two:
    #members

...

class N:
    #members

[member for member in inspect.getmembers(N) if member not in inspect.getmembers(NMinusK)]

另一种方法是使用@AshwiniChaudhary的示例:

import inspect

class A:
    var1 = 2
    var2 = 2

class B(A):
    var3 = 3
    var4 = 4

[member for member in inspect.getmembers(B) if member not in inspect.getmembers(A)]
#prints [('var3', 3), ('var4', 4)]
使用此方法,您可以决定从继承层次结构中的哪个类中减去成员,例如:

class One:
    #members

class Two:
    #members

...

class N:
    #members

[member for member in inspect.getmembers(N) if member not in inspect.getmembers(NMinusK)]

我看不出这是怎么回答这个问题的。具体来说,给定一个类Foo及其子类Bar,hasattrBar,attr将返回true,无论该属性是在Foo中定义的还是在Bar中定义的。具体地说,给定一个类Foo及其子类Bar hasattrBar,无论属性是在Foo还是Bar中定义的,attr都将返回true。你没听说过PEP8吗?@BasicWolf每篇文章下面都有一个编辑按钮,还有一个协作网站,你可以用它来编辑我的文章,而不是对它投否决票有了这个理由,我们根本就不需要下一票按钮——我们可以随时修正错误。然而,由于风格偏好而否决投票是荒谬的+从我这里。我们可以保存有关缩进级别的投诉,直到有一个像样的代码编辑器为止+1来自meGuys,这是我个人的观点,但请查看Ashwini Chaundhary的其他答案@StackOverflow。2个字符缩进。现在,想想有一天你会读到这样的代码,并没有幻想的IDE来重新缩进它。感觉舒服吗?这些标准,特别是PEP8是为了我们每个人而创建的,它也是使Python代码可读的一部分。P.S.Ashwini Chaudhary,我知道你还没有读过PEP8,因为代码行超过80个字符:两个字符缩进的大减号。你没听说过PEP8吗?@BasicWolf每篇文章下面都有一个编辑按钮,还有一个协作网站,你可以用它来编辑我的文章,而不是对它投否决票有了这个理由,我们根本就不需要下一票按钮——我们可以随时修正错误。然而,由于风格偏好而否决投票是荒谬的+从我这里。我们可以保存有关缩进级别的投诉,直到有一个像样的代码编辑器为止+1来自meGuys,这是我个人的观点,但请查看Ashwini Chaundhary的其他答案@StackOverflow。2个字符缩进。现在,想想有一天你会读到这样的代码,并没有幻想的IDE来重新缩进它。感觉舒服吗?这些标准,特别是PEP8是为了我们每个人而创建的,它也是使Python代码可读的一部分。P.S.Ashwini Chaudhary,我知道你还没有读过PEP8,因为代码行超过80个字符: