| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
'''Функции str() и print() вызывают __str__()repr() - __repr__()Если __str__ нет, то будет вызваться __repr__'''class User:    def __init__(self, first_name):        self.first_name = first_name    def __str__(self):        return f'User {self.first_name}'    def __repr__(self):        return f'Repr Usef {self.first_name}'class Pizza:    passdef test_1():    # print(repr([1, 2, 3]))    user = User('John')    print(repr(user))    print(repr(Pizza()))    class UnknownUser:    passdef test_2():    users = [UnknownUser(), UnknownUser()]    print(users)    users_with_name = [User('Billy'), User('Jimmy')]    print(users_with_name)    print(users_with_name[0])    print(users_with_name[1])class SuperUser:    def __init__(self, first_name, last_name):        self.first_name = first_name        self.last_name = last_name    def __str__(self):        return f"__str__ method: {self.first_name} {self.last_name}"    def __repr__(self):        return f"__repr__ method: {self.first_name} {self.last_name}"def test_3():    user = SuperUser("Vasya", "Pypkin")    print(f"{repr(user)}")    # или лучше воспользоваться !r    print(f"{user!r}") # !r вызовет не __str__, а __repr__# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        class Pizza:        def __init__(self, name, ingredients):        self.name = name        if ingredients is None:            self.ingredients = []        else:            self.ingredients = ingredients                def __repr__(self):        self.ingredients.sort(key=lambda x: x.weight, reverse=True)        ret = f'Пицца {self.name} состоит из:\n'        for ing in self.ingredients:            ret += ing.__repr__() + '\n'        return ret[:-1]class Ingredient:        def __init__(self, name, weight):        self.name = name        self.weight = weight    def __repr__(self):        return f'{self.name}: {self.weight}г.'def test_4():    barbecue = Pizza('BBQ', [        Ingredient('chicken', 200),        Ingredient('mozzarella', 300),        Ingredient('sauce bbq', 150),        Ingredient('red onion', 150)    ])    print(barbecue)def test_5():    ing = [        Ingredient('chicken', 200),        Ingredient('mozzarella', 300),        Ingredient('sauce bbq', 150),        Ingredient('red onion', 150)    ]    ing.sort(key=lambda x: x.weight, reverse=True)    print(ing)        # foo = {x.name: x.weight for x in ing}    # foo2 = sorted(foo.items(), key=lambda item: item[1], reverse=True)    # print(foo)    # print(foo2)def main():    # test_1()    # test_2()    # test_3()    test_4()    # test_5()if __name__ == '__main__':    main()
 |