tixonochek
@tixonochek
Мамкин Программист

Классы в Python?

Смотрите, я не пойму в чем проблема:
У меня есть код, вот он:
class Engine:
	version = "v1.0.0"

	def pi(self):
		if self == "-v":
			print(f"TScript version: {Engine.version}")

		elif self == "-u":
			print(f"Update TScript in this time is impossible!")

		elif self == "help":
			print(f"""
				# <this is function description>

				TScript.pi("-v")  <Check TScript version>
				TScript.pi("-u")  <Update TScript>
				TScript.pi("help") <Check args list on "pi" method on "TScript">
			""")
 
		else:
			print("Invalid Arg")

TScript = Engine()

TScript.pi("-v")

Так вот, и вот мне выдает ошибку что я даю 2 аргумента в строчке TScript.pi("-v") хотя я даю один.. И что это за бред? Скорее всего я просто чего то не понимаю, и моя ошибка как обычно очень глупая. В данный момент изучаю классы и все это.
  • Вопрос задан
  • 106 просмотров
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
class Engine:
  version = "v1.0.0"

  def pi(self, arg):
      if arg == "-v":
          ...

t_script = Engine()
t_script.pi("-v")
Ответ написан
SoreMix
@SoreMix
yellow
Аргумента функция получила два.
Первый - self (сам объект), второй - ваш (-v)

Должно быть нечто вроде
class Engine:
  version = "v1.0.0"

  def pi(self, cmd):
    if cmd == "-v":
      print(f"TScript version: {Engine.version}")

    elif cmd == "-u":
      print(f"Update TScript in this time is impossible!")

    elif cmd == "help":
      print(f"""
        # <this is function description>

        TScript.pi("-v")  <Check TScript version>
        TScript.pi("-u")  <Update TScript>
        TScript.pi("help") <Check args list on "pi" method on "TScript">
      """)
 
    else:
      print("Invalid Arg")


Когда вы вызываете метод,
TScript = Engine()

TScript.pi("-v")

можно сказать, что питон его выполняет как
Engine.pi(TScript, '-v')

Первый аргумент методов класса - ссылка на объект
Ответ написан
@Vlad1987
учу Python
У тебя метод pi не принимает аргументы, отсюда и ошибка, а первый аргумент всегда по умолчанию self, по этому и пишет что 2. Должно быть так def pi(self, second_argument). И ещё: экземпляры классов по pep8 называться должны с маленькой буквы и без кэмэлкэйсов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы