我想将 SubClass 中的所有属性名称放到一个列表中,我想在 Base 类中这样做。我怎样才能做到这一点?
我现在的方法是:
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 在评论中所建议的那样,如果您需要这样做,您几乎肯定会犯设计错误。但是,如果没有更多信息,我们将无法诊断问题。
这似乎是做你想做的最简单的方法:
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
测试新属性是这样的: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__
.如果你不这样做,你会得到 不同的结果取决于您检查新属性的时间 .
关于Python:如何在基类的方法中获取子类的新属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136154/