__bases__
次の関数を見つけましたが、追加のスキャンが必要な理由がわかりません。
def getMembersWithBases(classType):
members = set(dir(classType))
# recursive bases scan
for baseClassType in classType.__bases__:
members.update(getMembersWithBases(baseClassType))
return members
次の関数はより高速で、同じ結果が得られます。では、なぜ追加の__bases__
スキャンが必要なのですか?
def getMembers(classType):
members = set(dir(classType))
return members
新しいスタイルと古いスタイルのクラスの両方を含むいくつかのテスト コード:
class Father(object):
def testFather():
pass
class Mother(object):
def testMother():
pass
class Child(Father, Mother):
def testChild():
pass
print type(Child)
print getMembers(Child) == getMembersWithBases(Child)
class Father:
def testFather():
pass
class Mother:
def testMother():
pass
class Child(Father, Mother):
def testChild():
pass
print type(Child)
print getMembers(Child) == getMembersWithBases(Child)
結果:
<type 'type'>
True
<type 'classobj'>
True