正如@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__
。如果你不這樣做,你將得到不同的結果,具體取決於何時檢查新屬性。
來源
2011-08-21 03:40:33
agf
你想實現什麼目標? –
對不起,我編輯了這個問題。我想創建一些像google的db api這樣的類,當我定義db.Model類的新子類時,db.Model會知道SubClass的屬性是數據庫的柱子名稱。 – walknotes
你不需要'dir(self)'而是'dir(self .__ class __)',否則你會得到實例屬性(例如,在子類「__init__」中定義),而不僅僅是類的屬性。否則,你的版本與我的版本基本相同,我的版本稍微短一些(和可論證的更清晰,因爲'-'意思是差異,這就是你想要的)。 – agf