Skip to content

Instantly share code, notes, and snippets.

@eirenik0
Last active August 29, 2015 14:03
Show Gist options
  • Save eirenik0/6f95f99bf8c002508f87 to your computer and use it in GitHub Desktop.
Save eirenik0/6f95f99bf8c002508f87 to your computer and use it in GitHub Desktop.
Реализует наследуемый метод перегрузки операции вывода, отображающий имена классов экземпляров и все атрибуты в виде пар имя=значение, имеющиеся в экземплярах (исключая атрибуты, унаследованные от классов). Может добавляться в любые классы и способен работать с любыми экземплярами
#-*- coding: utf-8 -*-
class AttrDisplay:
"""
Реализует наследуемый метод перегрузки операции вывода, отображающий
имена классов экземпляров и все атрибуты в виде пар имя=значение,
имеющиеся в экземплярах (исключая атрибуты, унаследованные от классов).
Может добавляться в любые классы и способен работать с любыми
экземплярами.
"""
def gatherAttrs(self):
attrs = []
for key in sorted(self.__dict__):
attrs.append('%s=%s' % (key, getattr(self, key)))
return ', '.join(attrs)
def __str__(self):
return '[%s: %s]' % (self.__class__.__name__, self.gatherAttrs())
if __name__ == '__main__':
class TopTest(AttrDisplay):
count = 0
def __init__(self):
self.attr1 = TopTest.count
self.attr2 = TopTest.count+1
TopTest.count += 2
class SubTest(TopTest):
pass
X, Y = TopTest(), SubTest()
print(X)
# Выведет все атрибуты экземпляра
print(Y)
# Выведет имя класса,
# самого близкого в дереве наследования
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment