Как подсказывает @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__
. Если вы этого не сделаете, вы получите различные результаты в зависимости от того, когда вы проверяете наличие новых атрибутов .