Написать функцию fcounter(), которая первым параметром получает некоторый класс, а остальные параметры применяет для создания экземпляра этого класса (передаёт конструктору). Функция должна возвращать 4 отсортированных списка: имена методов класса, имена полей класса, имена методов, которые появились в экземпляре (т. е. в классе их не было, а при создании экземпляра они появились) и имена полей, которые появились в экземпляре (под «полями» имеются в виду не-callable() атрибуты). Внимание! Поле может внезапно сделаться классом (и наоборот), такие ситуации тоже надо отслеживать. Имена, начинающиеся на "_", не учитываются.
class C: x, y, z = 1, 3, 5 def X(self): return self.x def Y(self): return self.y def __init__(self, dx, dy, dz): self.x = dx self.Y = dy self.Z = dz cm, cf, om, of = fcounter(C, 6, 7, 8) print("Class: methods", *cm) print("Class: fields", *cf) print("Object: methods", *om) print("Object: fields", *of)
Вам понадобятся функции callable() и getattr()
Class: methods X Y Class: fields x y z Object: methods Object: fields Y Z