Python:如何在基类方法中获取子类的新属性名?
我想把子类(SubClass)里的所有属性名称放到一个列表里,但我想在基类(Base class)里完成这个操作。我现在的方法是:
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 = ''
有没有更好的方法可以做到这一点呢?
谢谢大家的帮助。
1 个回答
5
正如@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__
。如果不这样做,你会发现检查新属性的结果会因检查的时间不同而不同。