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个字符: