Python OOP getters setters, decorator property, classmethod, staticmethod

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ม.ค. 2025

ความคิดเห็น •

  • @radma1233
    @radma1233 4 หลายเดือนก่อน +3

    Просто замечательно все объяснил на жизненных понятных примерах. Превеликая благодарность тебе, Человек с большой буквы!

  • @MrEklair
    @MrEklair 2 ปีที่แล้ว +12

    С каждым пройденным уроком я всё больше радуюсь, что нашёл этот канал. Даже если что то не понятно с первого раза, то ты хотя бы понимаешь, что просто не уловил и надо пересмотреть, а не лектор пытается привить тебе ненависть к программированию. Очень лаконично и хорошо подан материал, присоединяюсь к благодарностям! Выпускайте ещё лекций.

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว

      Спасибо, очень приятно

  • @killa5159
    @killa5159 2 ปีที่แล้ว +10

    Спасибо за курс! Удивляюсь каждый раз насколько точно, быстро и понятно вы объясняете материал. Успехов вам в вашем деле!

  • @nadyamoscow2461
    @nadyamoscow2461 4 ปีที่แล้ว +53

    Очень понятный и наглядный урок, спасибо за ваш труд. Если у вас будет возможность, пожалуйста, рассмотрите и дескрипторы тоже.

    • @PythonHubStudio
      @PythonHubStudio  4 ปีที่แล้ว +5

      Будут, но чуть позже

    • @shemyatin_konstantin
      @shemyatin_konstantin ปีที่แล้ว +1

      ​@@PythonHubStudioспасибо за Ваш труд. Всё ещё планируется продолжение? Очень ждём))

  • @ВенцлавТальмберг
    @ВенцлавТальмберг 3 ปีที่แล้ว +53

    Четко, постепенно. Без пропусков по причине "это классика бл№ть это знать надо". Классные уроки спасибо.

  • @andreydr2861
    @andreydr2861 2 ปีที่แล้ว +9

    И снова БИНГО! Реально все 3 урока просты в понимании, без замудреных терминов. Все прекрасно преподнесено, спасибо автору, приступаю к практике

  • @ivan-lebedev-e8p
    @ivan-lebedev-e8p ปีที่แล้ว +2

    у Вас лучшие уроки по программированию из всех что я видел. большое спасибо!

  • @PythonHubStudio
    @PythonHubStudio  3 ปีที่แล้ว +8

    Ссылка на ПОЛНЫЙ курс ООП из ТРЕХ видео:
    th-cam.com/play/PLNi5HdK6QEmX9fxp3_IBFx1O5tiTmKlYm.html
    И созданием профессиональной программы в ООП стиле:
    th-cam.com/play/PLNi5HdK6QEmUIkR63RLqkECTCUwThQtcN.html

  • @vinter_man
    @vinter_man 2 ปีที่แล้ว +7

    Спасибо, это был очень качественный мини-курс. Однозначно, лайк, подписка и уважение+ )))

  • @mihailbury240
    @mihailbury240 ปีที่แล้ว +2

    Спасибо за серию видео по ООП! После просмотра все уложилось в голове и стало значительно понятнее!

  • @АрТём-п8к4д
    @АрТём-п8к4д 3 ปีที่แล้ว +5

    Спасибо за ваш труд. Наглядно, не спеша и не тараторя и все понятно. Большое спасибо.

  • @iliaplotnikov2167
    @iliaplotnikov2167 2 ปีที่แล้ว +3

    Отличный урок, все понятно, а что не понятно - стало понятно по ходу видео. 👍

  • @victoriaco1262
    @victoriaco1262 2 หลายเดือนก่อน

    Огромная благодарность) все очень доходчиво и понятно! Успехов Вам, искренне желаю Вам быть самым счастливым, самым любимым, самым здоровым)) и пусть у Вас всегда все будет замечательно!) 👍 Спасибо!!! 🙏

    • @PythonHubStudio
      @PythonHubStudio  2 หลายเดือนก่อน +1

      Спасибо, взаимно!🤗

  • @Tequila_Sánchez
    @Tequila_Sánchez ปีที่แล้ว +1

    Боже, спасибо что есть такие люди как Вы!

  • @msc_Noname
    @msc_Noname 3 ปีที่แล้ว +1

    Впервые столкнулась с понятиями полиморфизма, инкапсуляции и многого другого на этих уроках. Вау!

  • @EvgeniySakharov
    @EvgeniySakharov 2 ปีที่แล้ว +2

    Отличный контент. Про перегрузку тоже надо знать. Запишите пожалуйста про перегрузку методов. Спасибо.

  • @gis6190
    @gis6190 3 ปีที่แล้ว +5

    Очень хорошие уроки. Про перегрузку операторов тоже хотим.

  • @ВладиславАндреев-э8т
    @ВладиславАндреев-э8т 2 ปีที่แล้ว +1

    Огромное спасибо! Посмотрел двух других преподавателей пайтона, у которых тоже есть талант к обучению, но здесь все выражено реально максимально понятно и доступно!
    Два дня бился с декоратором @property, реально не мог из текста и видео понять, что это и зачем нужно, но после этого видео реально все встало на места.

    • @antonpython8059
      @antonpython8059 2 ปีที่แล้ว

      как по мне все же нагляднее по старинке :
      get_a()
      set_a()

  • @railsabbitovich408
    @railsabbitovich408 4 ปีที่แล้ว +9

    круто! ) Да , хотелось бы про дескрипторы))

  • @godgiven994
    @godgiven994 ปีที่แล้ว +1

    Действительно годно.. Спасибо!

  • @grriimx
    @grriimx 3 ปีที่แล้ว +1

    Круто. И посмеялся, и усвоил инфу которую не понимал. Лойс+подписка

  • @ВячеславСуворов-у3в
    @ВячеславСуворов-у3в 2 ปีที่แล้ว +1

    Дай бог тебе здоровья!!!

  • @01011968Desgner
    @01011968Desgner 3 ปีที่แล้ว +2

    Круто сработано! Материал отлично зашел! Спасибо!

  • @ИванИванов-н9т9ъ
    @ИванИванов-н9т9ъ 3 ปีที่แล้ว +2

    Автор - красаучег! Спасибо.

  • @leonidgarnovskey9883
    @leonidgarnovskey9883 ปีที่แล้ว

    Спасибо за курс,прошел как базовый так и ооп благодаря автора ! больший ему респект)))

  • @ruslanruslan338
    @ruslanruslan338 2 ปีที่แล้ว +1

    Отличный урок про ООП, все ясно и понятно

  • @serga8543
    @serga8543 ปีที่แล้ว +2

    спасибо за видео

  • @felixcriminibusnulluseritd7315
    @felixcriminibusnulluseritd7315 3 ปีที่แล้ว +2

    Подписчиков тебе в карму автор!! Очень качественный материал

  • @vonmansfeld2244
    @vonmansfeld2244 3 ปีที่แล้ว +2

    Отлично. Спасибо!

  • @КириллАлександрович-б8у
    @КириллАлександрович-б8у 2 ปีที่แล้ว +1

    Спасибо! Понятно, доступным языком!.

  • @brutsmart
    @brutsmart 3 ปีที่แล้ว +1

    Спасибо за труд. Годное видео

  • @АлександрК-ш
    @АлександрК-ш 3 ปีที่แล้ว +2

    Здравствуйте. Зашел проголосовать за урок про декораторы.

  • @КсеніяПолюшко
    @КсеніяПолюшко 3 ปีที่แล้ว +2

    Спасибо большое! Лайк
    Про дескрипторы урок хотелось бы :]

  • @александргорбатов-е1с
    @александргорбатов-е1с 2 ปีที่แล้ว +2

    спасибо за видео
    управился с тремя роликами по ооп примерно дней за 14
    но если напрячься можно и дней за 7

  • @iren__va
    @iren__va 3 ปีที่แล้ว +2

    Класно пояснено!

  • @evalinor
    @evalinor 3 ปีที่แล้ว +10

    "Изменим значение констант" =) А так спасибо, очень хорошие уроки =)

    • @antonpython8059
      @antonpython8059 2 ปีที่แล้ว +1

      Да, это немного встряхнуло )

    • @shortvideos9955
      @shortvideos9955 ปีที่แล้ว +1

      Но это происходит только в праздничные дни, чтобы получить повышенный Level)

  • @АлёнаОсоченко-я9п
    @АлёнаОсоченко-я9п 2 ปีที่แล้ว +1

    отличный курс !

  • @Jenny-so-it
    @Jenny-so-it ปีที่แล้ว

    Спасибо за урок 👍🏼

  • @slavaseredenko4846
    @slavaseredenko4846 2 ปีที่แล้ว +2

    Только вот начался этот урок и я услышал выражение "Это будет не по ПЕП". Хм, что такое ПЕП!? Нашел в интернетах статью об этом преславутом Пеп8. Прочитал, теперь знаю намного больше. Спасибо тебе за внимательность к деталям

    • @gob0
      @gob0 2 ปีที่แล้ว +1

      Увидел твой комментарий и решил посмотреть что такое Пеп8. Прочитал, теперь знаю намного больше. Лол)

  • @VladStone
    @VladStone 2 ปีที่แล้ว +1

    урок бомба, спасибо огромное!

  • @otamurodmuminov188
    @otamurodmuminov188 3 ปีที่แล้ว +1

    Отличный урок. Очень понравился

  • @kinoshka453
    @kinoshka453 ปีที่แล้ว

    Спасибо за курс

  • @dmiv2895
    @dmiv2895 3 ปีที่แล้ว +1

    Конечно нужен урок

  • @Dallas1460
    @Dallas1460 2 ปีที่แล้ว

    Дякую за роботу та відео 👍🔥 а можна кайлі лінукс урок .

  • @juliaweinstein3133
    @juliaweinstein3133 3 ปีที่แล้ว +1

    Спасибо огромное!!

  • @КостяГорохов-б6с
    @КостяГорохов-б6с 3 ปีที่แล้ว +4

    Голосую за перегрузку оператора!!!!

  • @mr.vsadnik-__-5102
    @mr.vsadnik-__-5102 3 ปีที่แล้ว +1

    Лучший!!!!

  • @ВладимирШумик
    @ВладимирШумик 3 ปีที่แล้ว +4

    Добрый день. Только подписался на Ваш канал. Все четко, спасибо за информацию. Возможно у Вас есть видео про композицию в ООП, если неи, возможно ли записать такой ролик? Спасибо

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว +3

      Спасибо, нет, про композицию нет, скорее всего скоро сделаю, тема интересная.

    • @ВладимирШумик
      @ВладимирШумик 3 ปีที่แล้ว +1

      Спасибо

  • @user_alex_
    @user_alex_ ปีที่แล้ว

    👍👍👍👍👍👍👍👍👍👍👍👍👍👍

  • @ВладимирБузмаков-ь3и
    @ВладимирБузмаков-ь3и 2 ปีที่แล้ว

    Спасибо за урок! декоратор классметод может работать внутри наследованного класса, изменяя родительский?

  • @proxonq6968
    @proxonq6968 4 ปีที่แล้ว +3

    Видео курсы ТОП!!! А есть вопрос такой в pycharm debug как включить а то пишет "Frames are not available" что делать?

    • @PythonHubStudio
      @PythonHubStudio  4 ปีที่แล้ว +2

      Спасибо!
      Вы наверно не правильно работаете с точками останова, поставьте точку останова(между нумерацией строк и строкой кода).

  • @user-nx4oi5pt2u
    @user-nx4oi5pt2u 2 ปีที่แล้ว

  • @АлексейКомаров-ф8к
    @АлексейКомаров-ф8к 2 ปีที่แล้ว +1

    Спасибо. Цикл видео называется "с нуля до junior". Будут ли еще видео в этом плейлисте или всего этого уже достаточно для уровня Junior?

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว +1

      Знаний питон достаточно, осталось выбрать сферу где вы хотите быть джуниором, и изучить эти фреймворки. Например, для веб разработки на питон, нужно: python, фреймворк Django(поверхностно), реляционная база данных, например postgres. Вообщем, Джуниор должен что-то уметь делать на простом уровне

    • @АлексейКомаров-ф8к
      @АлексейКомаров-ф8к 2 ปีที่แล้ว +1

      @@PythonHubStudio спасибо большое. У вас хорошо получается объяснять. Развивайте канал и дальше

  • @harlok13
    @harlok13 2 ปีที่แล้ว

    здравствуйте) а почему в инициализаторе имя класса указано явно? и еще такой вопрос, разве стоит использовать isinstance для проверки на тип int? ведь булева значения также пройдут. буду благодарен за ответ

    • @harlok13
      @harlok13 2 ปีที่แล้ว

      спасибо) аналогия с игрой хорошо илюстрирует примеры использования

  • @symbol4572
    @symbol4572 3 ปีที่แล้ว

    Спасибо!

  • @andreweutuchenko9107
    @andreweutuchenko9107 3 ปีที่แล้ว +1

    Получается мы инкапсулируем переменную, чтобы ее нельзя было изменить, но при этом setter дает нам возможность ее изменять так-же как будто инкапсуляции и не было?

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว +3

      Да, только одно уточнение, код в сеттере препятствует присвоению не корректного значения, или сеттера вообще может не быть

  • @марумер
    @марумер 3 ปีที่แล้ว

    спасибо!

  • @konstbespr619
    @konstbespr619 3 ปีที่แล้ว +1

    Расскажи пожалуйста про конструкцию if __name__ == __main__:

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว +1

      Видео на канале "Импорт модулей" где-то с 15й минуты

  • @rostislavmalyshev1775
    @rostislavmalyshev1775 2 ปีที่แล้ว

    Спаасибо!

  • @old_time144
    @old_time144 5 หลายเดือนก่อน

    Интересный курс, но не понял для чего нужен slots?

  • @knarg4682
    @knarg4682 11 หลายเดือนก่อน

    Попробуйте написать x.lvl += 5 и понять, почему получилось то, что получилось.

  • @msmesh5666
    @msmesh5666 3 ปีที่แล้ว

    Доброго времени суток, скажите пожалуйста, есть ли ещё отличия декораторов @classmethod от @staticmethod, кроме написания и того, что метод класса работает с классом, а статистический с классом через свои параметры?

  • @misha8280
    @misha8280 2 ปีที่แล้ว

    А для чего __LVL, __HEALTH, __slots__? И что это такое? А так все три урока. 5 звезд) Хотелось бы курс на степик)

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว +1

      Какая разница на степик или тут) ничего не меняется, только на степик, почему-то берут копейки за то что должно быть в доступе бесплатно.
      Я вроде бы объясненил что эти переменные значат

    • @misha8280
      @misha8280 2 ปีที่แล้ว

      @@PythonHubStudio На степик просто задачи, а в интернете сугубо по ООП толковых задач я не нашёл. И в ролике я не до конца просто понял что обозначают. Но уже, загуглив, все разобрал. __LVL, __HEALTH - это инкапсулируемые атрибуты класса(которые будут использоваться в classmethod), а __slots__ - это список разрешенных свойств класса

  • @user-znamenskii
    @user-znamenskii 3 ปีที่แล้ว

    Если запускать метод set_cls_field через имя экземпляра, то он не срабатывает. Не могли сказать как это исправить?

  • @digitaIdevil
    @digitaIdevil ปีที่แล้ว

    Почему то строчка __slots__ конфликтовала со всем кодом и выдавала ошибку 'lvl' in __slots__ conflicts with class variable

  • @obsessivedisordeable
    @obsessivedisordeable 2 ปีที่แล้ว

    почему вы сначала используете переменную _lvl, а потом запрашиваете вывод просто lvl? это же получается незаданная переменная, разве нет? у меня ошибку выдал, когда я пыталась повторить ваш код

  • @brndk-games
    @brndk-games 2 ปีที่แล้ว

    Ничего не понятно, но очень интересно)

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว +1

      Круто) но жаль, мне(

  • @knocker6970
    @knocker6970 2 ปีที่แล้ว +1

    Урок понравился .
    Не понравилось то , что весь код на Pycharm пишу аналогично. Но при попытке обойти инкапсуляцию у меня вызывается ошибка.
    Декораторы не помогают и вообще не помогает ничего, никакие изменения кода. Даже get_lvl.
    Type Error и все, Досвидание! Хоть , что делай но ничего не получиться

  • @konstantinkuznetsof1217
    @konstantinkuznetsof1217 2 ปีที่แล้ว

    спасибо за интересное видео. но нужна помощь. пытаюсь повторять то что вы делаете в видео, для лучшего запоминания, полностью скопировал ваш код и при запуске программа выдает "" добиться изменения уровня как у вас не получилось, где может быть ошибка, подскажите пожалуйса

  • @kayuttv8231
    @kayuttv8231 2 ปีที่แล้ว

    Объясните пожалуйстп, почему __slots__ пишеться с двойным подчеркиванием слева и справа. И для чего это нужно. Заранее спасибо)

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว

      Инкапсулированный атрибут, благодаря подчеркиваниям вначале, а в конце - для симметрии, чтоб не путать со своими. Как-то так...

    • @kayuttv8231
      @kayuttv8231 2 ปีที่แล้ว

      @@PythonHubStudio Вроде понял, спасибо.

  • @martincimonyan9645
    @martincimonyan9645 3 ปีที่แล้ว +1

    а для чего перменная в классе подчёркнута с двух сторон ? (__slots__)

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว +1

      Специальный атрибут, в котором перечисляются имена переменных разрешенных в классе, создание других вызовет ошибку

  • @ИванВасильев-и5ж
    @ИванВасильев-и5ж 2 ปีที่แล้ว

    Урок супер👍. Я не понял только одно, как именно выбирается декоратор.

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว

      Не много не понял вопроса..., под ваши нужды

    • @ИванВасильев-и5ж
      @ИванВасильев-и5ж 2 ปีที่แล้ว

      @@PythonHubStudio Как выбирается декоратор к конкретной функции. Это рандомное выражение через @ или декораторы вшиты в сам пайтон и каждый может присвоен к определенным функциям. Надеюсь смог сформировать вопрос)

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว +2

      Эти декораторы вшиты про них это видео, можно создавать свои про это есть в уроке 7часовом(без ООП правда) и через декораторы часто нужно работать с библиотеками, фреймворками (они там уже "готовые" )

    • @ИванВасильев-и5ж
      @ИванВасильев-и5ж 2 ปีที่แล้ว +2

      @@PythonHubStudio спасибо большое за ответ, я уже смотрю 7 часовой курс👍

  • @arktikmoon
    @arktikmoon 3 ปีที่แล้ว +2

    Вроде бы как всё наглядно и доступно но тяжело доходит. Видимо пример с игрой воспринимается как то мной не оч. С кошельками вообще норм зашел урок. Спасибо за дополнительные пояснения как делать нужно, а как не нужно и почему не нужно.

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว +1

      Пример игры, это так, чтоб был пример на чем рассказывать, главное саму механику декораторов и инкапсуляции уловить, тоже самое можно сделать в кошельке, просто реализация списания-пополнения будет другая

    • @slavaseredenko4846
      @slavaseredenko4846 2 ปีที่แล้ว +1

      @@PythonHubStudio А мне отлично зашел пример с персонажами. Я прекрасно понимаю, зачем нужен тот или иной метод. Например, когда мы создаем класс мага, у него должно быть явно меньше очков прочности чем у танка. Я даже добавил себе показатели силы, выносливости, урона. Прямо уже готовый персонаж получился по характеристиками, только прилепить к игре и в путь. Спасибо за пример

  • @КацубаМихаил
    @КацубаМихаил 3 ปีที่แล้ว

    print(print(x.get_lvl()))) принт в принт что делает? Зачем так используется?

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว +2

      Та то случайно)

    • @КацубаМихаил
      @КацубаМихаил 3 ปีที่แล้ว +1

      @@PythonHubStudio Я уж подумал, какой-то хитрый способ одновременно напечатать и переменную и её свойства ))

  • @aleksy920
    @aleksy920 2 ปีที่แล้ว

    Не понимаю зачем запрещать доступ к объекту инкапсулированием, если тут же разрешаешь через property и setter?

    • @PythonHubStudio
      @PythonHubStudio  2 ปีที่แล้ว +1

      В методах вы можете прописать нюансы доступа к нему

  • @nazarpark32
    @nazarpark32 2 ปีที่แล้ว

    Как это всё запомнить!? :(

  • @bratka4636
    @bratka4636 3 ปีที่แล้ว

    Написал код по твоему видео ТОЧЬ В ТОЧЬ! НЕ ПОНИМАЮ ЧТО ЕМУ НЕ ХВАТАЕТ ( ОШИБКА НЕТУ АТРИБУТА ХОТЯ ОН УКАЗАН!)
    from datetime import datetime as dt
    class Player:
    __LVL, __HEALTH = 1, 100
    __slots__ = ['__lvl', '__health', '__born']
    def __init(self):
    self.__lvl = Player.__LVL
    self.__health = Player.__HEALTH
    self.__born = dt.now()
    # Декораторы используются в ООП при наличии двух одинаковых методов ( def lvl )
    # чтобы пайтон знал к чему обращаться в нужный момент
    @property # Decorator property
    def lvl(self):
    return self.__lvl
    @lvl.setter #SETTER Устанавливает значение
    def lvl(self, numeric):
    self.__lvl += numeric
    # Декоратор property может существовать один а setter без property НЕТ!
    # При вызове МЕТОДА не нужно указывать "()" так как он маскируется под свойство экземпляра
    x = Player()
    print(x.lvl)
    x.lvl = 5
    print(x.lvl)

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว

      В __slots__ по два подчеркивания нужно

    • @bratka4636
      @bratka4636 3 ปีที่แล้ว

      @@PythonHubStudio Нашёл проблему , оказалось в __init__() не было двух слешей "__init" Сори за беспокойство
      Ps: дефолтный тупёж )))))

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว

      А это я и не заметил....))

    • @bratka4636
      @bratka4636 3 ปีที่แล้ว

      @@PythonHubStudio не знаю на 100% (я же только как начинаю учить Питон ) но думаю что это частая проблема)))) (синтаксис)

    • @PythonHubStudio
      @PythonHubStudio  3 ปีที่แล้ว +1

      Очень частая, чтоб было проще среда разработки pycharm или vscode

  • @hopelesssuprem1867
    @hopelesssuprem1867 3 ปีที่แล้ว

    за видео спасибо, но называть это полным курсом по ООП? Смешно)

  • @vladkrolik2700
    @vladkrolik2700 3 ปีที่แล้ว +1

    не много поплыл на этом уроке

  • @maiorchiks3107
    @maiorchiks3107 3 ปีที่แล้ว

    не зашло

  • @Beningo_Rossi
    @Beningo_Rossi ปีที่แล้ว

    Привет, уроки топ, но впервые столкнулся с проблемой. Почему у меня не повышается уровень после присвоения ему нового значения, а именно Player.set_cls_field(10) , мне так же выдает 1 уровень, может я невнимательный, но вроде всё правильно сделал. 17:00
    Основной код:
    from datetime import datetime as dt
    class Player:
    _LVL, __HEALTH = 1, 100
    __slots__ = ['__lvl', '__health', '__born']
    def __init__(self):
    self.__lvl = Player._LVL
    self.__health = Player.__HEALTH
    self.__born = dt.now()
    @property
    def lvl(self):
    return self.__lvl, f'{dt.now() - self.__born}'
    @lvl.setter
    def lvl(self, numeric):
    self.__lvl += numeric
    if self.__lvl >= 100: self.__lvl = 100
    @classmethod
    def set_cls_field(cls, lvl=1, health=100):
    cls.__LVL = lvl
    cls.__HEALTH = health
    Код написанный уже после наследования:
    from Decorator import Player # Decorator названия файла с основным кодом
    Player.set_cls_field(10)
    x = Player()
    print(x.lvl)