问题描述
我想将SubClass中的所有属性名称都放到一个列表中,我想在Base类中这样做.我怎样才能做到这一点?我现在的方法是:
I want to put all attribute names in SubClass to a list, I want to do that in Base class. How can I do that?My method now is:
class Base():
def __init__(self):
# print SubClass' new attribues' names ('aa' and 'bb' for example)
for attr in dir(self):
if not hasattr(Base, attr):
print attr
class SubClass(Base):
aa = ''
bb = ''
有更好的方法吗?
感谢您的帮助.
推荐答案
正如@JohnZwinck在评论中建议的那样,如果需要这样做,几乎可以肯定会犯一个设计错误.但是,如果没有更多信息,我们将无法诊断问题.
As the @JohnZwinck suggested in a comment, you're almost certainly making a design mistake if you need to do this. Without more info, however, we can't diagnose the problem.
这似乎是您想要做的最简单的方法:
This seems the simplest way to do what you want:
class Base(object):
cc = '' # this won't get printed
def __init__(self):
# print SubClass' new attribues' names ('aa' and 'bb' for example)
print set(dir(self.__class__)) - set(dir(Base))
class SubClass(Base):
aa = ''
bb = ''
foo = SubClass()
# set(['aa', 'bb'])
您需要self.__class__
而不是self
来测试新属性的原因是:
The reason you need self.__class__
instead of self
to test for new attributes is this:
class Base(object):
cc = ''
def __init__(self):
print set(dir(self)) - set(dir(Base))
# print SubClass' new attribues' names ('aa' and 'bb' for example)
class SubClass(Base):
def __init__(self):
self.dd = ''
super(SubClass, self).__init__()
aa = ''
bb = ''
foo = SubClass()
# set(['aa', 'dd', 'bb'])
如果您希望定义的类之间存在差异,则需要使用__class__
.如果不这样做,根据您何时检查新属性,您会得到不同的结果.
If you want the difference between the classes as defined, you need to use __class__
. If you don't, you'll get different results depending on when you check for new attributes.
这篇关于Python:如何在基类的方法中获取子类的新属性名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!