【发布时间】:2011-08-21 03:32:19
【问题描述】:
我想将 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 = ''
有更好的方法吗?
感谢您的帮助。
【问题讨论】:
-
你实际上想要完成什么?
-
对不起,我已经编辑了这个问题。我想做一些像google的db api这样的类,当我定义db.Model类的新子类时,db.Model会知道子类的属性是数据库的列名。
-
您不需要
dir(self),而是dir(self.__class__),否则您将获得实例属性(例如在子类中定义的__init__),而不仅仅是类的属性。否则,您的版本与我的基本相同,我的版本更短一些(而且,有争议,更清晰,因为-意味着不同,这就是您想要的)。 -
@JohnZ 的意思是什么为什么您认为您需要了解子类在基类中添加的属性。这没有任何意义——基类不应该知道任何关于子类的事情,真的。
-
谢谢@agf,是的,你的方法是一样的,而且好多了,这就是我想要的。但是为什么在我的测试中, dir(self) == dir(self.__class__) 似乎总是正确的?它们都没有实例属性。
标签: python attributes subclass