class Huy:
norm_length = 15 # атрибут класса, доступен в Huy.norm_length
def __init__(self, length, width):
"""Инициализатор объекта класа Хуй, создает не класс, а конкретный хуй
с конкретными параметрами"""
self.length = length # записываем переданные при создании аргументы в качестве атрибутов для хуя
self.width = width
def extend(self, length):
"""Увеличиваем хуй. Чтобы увеличить хуй, у нас должен быть конкретный хуй
Мы же не можем увеличить абстрактный хуй, правильно? Вот мы и передаем его
как селф - при выполнении кода он заменится на конкретный объект хуя, для
которого мы вызываем метод
например hui.extand(3) - будет равносильно Huy(self=hui, length=3)
"""
self.length += length
def is_norm(self):
"""Проверяет, нормальный у тебя хуй или ты короткоствол"""
# атрибуты класса передаются объекту поэтому можем обратиться к ним через self
return self.length >= self.norm_length
@classmethod
def change_norm_length(cls, delta):
"""Метод класса, тут мы можем изменить атрибуты класса и получить доступ
к другим методам класса"""
cls.norm_length += delta
@staticmethod
def convert_sm_to_dm(size_in_sm):
"""Просто функция которая превращает сантиметры в дециметры"""
return size_in_sm / 10
huy = Huy(14, 1) # вызывается инит, создаются атрибуты huy.length и huy.width
huy.is_norm() # вызывается Huy.is_norm(huy), возвращается False
huy.extend(3) # вызывается Huy.extend(huy, 3), huy.length = 17
huy.is_norm() # True
huy.change_norm_length(1) # изменяется атрибут КЛАССА, изменения актуальны для всех объектов хуев
Huy.change_norm_length(2) # обе строки вызывают один и тот же метод, норма теперь равна 18
huy2 = Huy(17, 6); huy2.is_norm() # False
huy.is_norm() # False
huy.convert_sm_to_dm(huy.length) # объект хуя не передается, поэтому надо передавать его явно
Y2xhc3MgSHV5OgogICAgbm9ybV9sZW5ndGggPSAxNSAjINCw0YLRgNC40LHRg9GCINC60LvQsNGB0YHQsCwg0LTQvtGB0YLRg9C/0LXQvSDQsiBIdXkubm9ybV9sZW5ndGgKIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlbmd0aCwgd2lkdGgpOgogICAgICAgICIiItCY0L3QuNGG0LjQsNC70LjQt9Cw0YLQvtGAINC+0LHRitC10LrRgtCwINC60LvQsNGB0LAg0KXRg9C5LCDRgdC+0LfQtNCw0LXRgiDQvdC1INC60LvQsNGB0YEsINCwINC60L7QvdC60YDQtdGC0L3Ri9C5INGF0YPQuQogICAgICAgINGBINC60L7QvdC60YDQtdGC0L3Ri9C80Lgg0L/QsNGA0LDQvNC10YLRgNCw0LzQuCIiIgogICAgICAgIHNlbGYubGVuZ3RoID0gbGVuZ3RoICMg0LfQsNC/0LjRgdGL0LLQsNC10Lwg0L/QtdGA0LXQtNCw0L3QvdGL0LUg0L/RgNC4INGB0L7Qt9C00LDQvdC40Lgg0LDRgNCz0YPQvNC10L3RgtGLINCyINC60LDRh9C10YHRgtCy0LUg0LDRgtGA0LjQsdGD0YLQvtCyINC00LvRjyDRhdGD0Y8KICAgICAgICBzZWxmLndpZHRoID0gd2lkdGgKIAogICAgZGVmIGV4dGVuZChzZWxmLCBsZW5ndGgpOgogICAgICAgICIiItCj0LLQtdC70LjRh9C40LLQsNC10Lwg0YXRg9C5LiDQp9GC0L7QsdGLINGD0LLQtdC70LjRh9C40YLRjCDRhdGD0LksINGDINC90LDRgSDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LrQvtC90LrRgNC10YLQvdGL0Lkg0YXRg9C5CiAgICAgICAg0JzRiyDQttC1INC90LUg0LzQvtC20LXQvCDRg9Cy0LXQu9C40YfQuNGC0Ywg0LDQsdGB0YLRgNCw0LrRgtC90YvQuSDRhdGD0LksINC/0YDQsNCy0LjQu9GM0L3Qvj8g0JLQvtGCINC80Ysg0Lgg0L/QtdGA0LXQtNCw0LXQvCDQtdCz0L4KICAgICAgICDQutCw0Log0YHQtdC70YQgLSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40Lgg0LrQvtC00LAg0L7QvSDQt9Cw0LzQtdC90LjRgtGB0Y8g0L3QsCDQutC+0L3QutGA0LXRgtC90YvQuSDQvtCx0YrQtdC60YIg0YXRg9GPLCDQtNC70Y8KICAgICAgICDQutC+0YLQvtGA0L7Qs9C+INC80Ysg0LLRi9C30YvQstCw0LXQvCDQvNC10YLQvtC0CiAgICAgICAg0L3QsNC/0YDQuNC80LXRgCBodWkuZXh0YW5kKDMpIC0g0LHRg9C00LXRgiDRgNCw0LLQvdC+0YHQuNC70YzQvdC+IEh1eShzZWxmPWh1aSwgbGVuZ3RoPTMpCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5sZW5ndGggKz0gbGVuZ3RoCiAKICAgIGRlZiBpc19ub3JtKHNlbGYpOgogICAgICAgICIiItCf0YDQvtCy0LXRgNGP0LXRgiwg0L3QvtGA0LzQsNC70YzQvdGL0Lkg0YMg0YLQtdCx0Y8g0YXRg9C5INC40LvQuCDRgtGLINC60L7RgNC+0YLQutC+0YHRgtCy0L7QuyIiIgogICAgICAgICMg0LDRgtGA0LjQsdGD0YLRiyDQutC70LDRgdGB0LAg0L/QtdGA0LXQtNCw0Y7RgtGB0Y8g0L7QsdGK0LXQutGC0YMg0L/QvtGN0YLQvtC80YMg0LzQvtC20LXQvCDQvtCx0YDQsNGC0LjRgtGM0YHRjyDQuiDQvdC40Lwg0YfQtdGA0LXQtyBzZWxmCiAgICAgICAgcmV0dXJuIHNlbGYubGVuZ3RoID49IHNlbGYubm9ybV9sZW5ndGggCiAKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGNoYW5nZV9ub3JtX2xlbmd0aChjbHMsIGRlbHRhKToKICAgICAgICAiIiLQnNC10YLQvtC0INC60LvQsNGB0YHQsCwg0YLRg9GCINC80Ysg0LzQvtC20LXQvCDQuNC30LzQtdC90LjRgtGMINCw0YLRgNC40LHRg9GC0Ysg0LrQu9Cw0YHRgdCwINC4INC/0L7Qu9GD0YfQuNGC0Ywg0LTQvtGB0YLRg9C/IAogICAgICAgINC6INC00YDRg9Cz0LjQvCDQvNC10YLQvtC00LDQvCDQutC70LDRgdGB0LAiIiIKICAgICAgICBjbHMubm9ybV9sZW5ndGggKz0gZGVsdGEKIAogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGNvbnZlcnRfc21fdG9fZG0oc2l6ZV9pbl9zbSk6CiAgICAgICAgIiIi0J/RgNC+0YHRgtC+INGE0YPQvdC60YbQuNGPINC60L7RgtC+0YDQsNGPINC/0YDQtdCy0YDQsNGJ0LDQtdGCINGB0LDQvdGC0LjQvNC10YLRgNGLINCyINC00LXRhtC40LzQtdGC0YDRiyIiIgogICAgICAgIHJldHVybiBzaXplX2luX3NtIC8gMTAKICAgICAgICAKaHV5ID0gSHV5KDE0LCAxKSAjINCy0YvQt9GL0LLQsNC10YLRgdGPINC40L3QuNGCLCDRgdC+0LfQtNCw0Y7RgtGB0Y8g0LDRgtGA0LjQsdGD0YLRiyBodXkubGVuZ3RoINC4IGh1eS53aWR0aApodXkuaXNfbm9ybSgpICMg0LLRi9C30YvQstCw0LXRgtGB0Y8gSHV5LmlzX25vcm0oaHV5KSwg0LLQvtC30LLRgNCw0YnQsNC10YLRgdGPIEZhbHNlCmh1eS5leHRlbmQoMykgIyDQstGL0LfRi9Cy0LDQtdGC0YHRjyBIdXkuZXh0ZW5kKGh1eSwgMyksIGh1eS5sZW5ndGggPSAxNwpodXkuaXNfbm9ybSgpICMgVHJ1ZQpodXkuY2hhbmdlX25vcm1fbGVuZ3RoKDEpICMg0LjQt9C80LXQvdGP0LXRgtGB0Y8g0LDRgtGA0LjQsdGD0YIg0JrQm9CQ0KHQodCQLCDQuNC30LzQtdC90LXQvdC40Y8g0LDQutGC0YPQsNC70YzQvdGLINC00LvRjyDQstGB0LXRhSDQvtCx0YrQtdC60YLQvtCyINGF0YPQtdCyCkh1eS5jaGFuZ2Vfbm9ybV9sZW5ndGgoMikgIyDQvtCx0LUg0YHRgtGA0L7QutC4INCy0YvQt9GL0LLQsNGO0YIg0L7QtNC40L0g0Lgg0YLQvtGCINC20LUg0LzQtdGC0L7QtCwg0L3QvtGA0LzQsCDRgtC10L/QtdGA0Ywg0YDQsNCy0L3QsCAxOApodXkyID0gSHV5KDE3LCA2KTsgaHV5Mi5pc19ub3JtKCkgIyBGYWxzZQpodXkuaXNfbm9ybSgpICMgRmFsc2UKaHV5LmNvbnZlcnRfc21fdG9fZG0oaHV5Lmxlbmd0aCkgIyDQvtCx0YrQtdC60YIg0YXRg9GPINC90LUg0L/QtdGA0LXQtNCw0LXRgtGB0Y8sINC/0L7RjdGC0L7QvNGDINC90LDQtNC+INC/0LXRgNC10LTQsNCy0LDRgtGMINC10LPQviDRj9Cy0L3Qvg==