Написать функцию 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


CategoryHomework

LecturesCMC/PythonIntro2020/Homework_CountFields (last edited 2020-10-27 20:01:13 by FrBrGeorge)