Я попадаю в серьезный ООП с Python и сталкиваюсь с некоторыми проблемами. У меня есть класс с инициализатором, три частные переменные и набор и получение методов для каждой переменной.Метод класса для создания нового экземпляра
Кроме того, у него есть метод ввода, который позволяет пользователю вводить значение для переменных при их вызове, вместо того, чтобы требовать вызова в основной функции, передающей значение методу набора классов, input
. Таким образом, я могу сразу же проверить запись пользователя в рамках методы, специфичной для требований к данным:
def input_first_name(self):
done = 0
while done == 0:
print("Input First Name:",end='')
first_name = input()
if first_name.isalpha():
self.__first_name = first_name
done = 1
else:
print("Invalid Entry. Please use alphabetic characters only.")
Используя эти методы ввода, я другой метод, который использует их, чтобы создать новый экземпляр класса (просто ждать, я уже знаю о чем вы думаете):
@classmethod
def new(cls):
cls.input_first_name(cls)
cls.input_last_name(cls)
cls.input_birthday(cls)
return cls
Так что я знаю, что с помощью этого, я не буду на самом деле экземпляр нового экземпляра. Однако использование методов не сразу бросает какие-либо ошибки. Но когда я ссылаюсь на свой недавно созданный экземпляр с методом get, вот где я попадаю в неприятности, которые, как я знаю, связаны с не созданием экземпляров.
new_relative = Relative.new()
print(new_relative.get_first_name())
приводит:
TypeError: get_first_name() missing 1 required positional argument: 'self'
Есть прочь способ иметь метод класса, используемый в моей главной функции для инстанцирования нового экземпляра, который использует мою идею ввода и проверки пользователя в простом и элегантной манере?
Для справки, минимальный образец класса:
class Relative:
__first_name = ""
__last_name = ""
__birthday = 0
def __init__(self, first_name,last_name,birthday):
self.__first_name = first_name
self.__last_name = last_name
self.__birthday = birthday
def get_first_name(self):
return self.__first_name