Я серьезно занимаюсь ООП с 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