#python #python-3.x #class #attributeerror
Вопрос:
Напишите класс с именем «Человек» с атрибутами данных для имени, адреса и номера телефона человека.
class Person:
def __init__(self, n, a, p):
self.name = n
self.address = a
self.phone = p
def set_name(self, n):
self.name = n
def set_address(self, a):
self.address = a
def set_phone(self, p):
self.phone = p
def get_name(self):
return 'Customer Name:'
def get_address(self):
return 'Customer Address:'
def get_phone(self):
return 'Customer Phone Number:'
def main():
n = input('Enter Customer Name: ')
a = input('Enter the Customer Address: ')
p = input('Enter the Customer Phone Number: ')
print(n.get_person())
print(a.get_address())
print(p.get_phone())
main()
Как я могу исправить свою ошибку атрибута?
Ответ №1:
Во-первых, ваши ошибки действительно должны быть TypeError
, потому что вы вызываете метод экземпляра из класса:
>>> class Foo:
... def __init__(self):
... self.bar = 1
... def thing(self):
... return self.bar
...
>>>
>>>
>>> Foo.thing()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: thing() missing 1 required positional argument: 'self'
Однако, несмотря на это, исправление остается тем же самым.
Вам необходимо создать экземпляр класса, чтобы получить доступ к его атрибутам:
class Foo:
def __init__(self):
self.bar = 1
# Foo is a class, but it doesn't have a
# bar attribute. An *instance* of the class
# does
# this raises an attributeError
Foo.bar
AttributeError
# this doesn't, because we created an instance
foo = Foo()
foo.bar
1
Вам нужно создать экземпляр person, затем вы сможете получить его атрибуты:
class Person:
def __init__(self, name, address, phone):
self.name = name
self.address = address
self.phone = phone
Person.phone
# AttributeError
# Create an instance of Person here
tim = Person(name='Tim', address='1234 Main St', phone='555-5555')
# Then you can get Tim's information
tim.phone
'555-5555'
Ответ №2:
Вам нужно создать экземпляр класса Person, используя что-то вроде person = Person(n, a, p)
. Сделайте это после ввода инструкций вашей main()
функции.
Во-вторых, при распечатке атрибутов вам необходимо ссылаться на экземпляр созданного вами класса Person (т. Е. person.get_person(), person.get_address () и т. Д.).
Наконец, при вызове функции get убедитесь, что эти функции возвращают искомое значение. Функция get_address()
должна возвращать self.адрес.
Вот мое предложение:
class Person:
def __init__(self, n, a, p):
self.name = n
self.address = a
self.phone = p
def set_name(self, n):
self.name = n
def set_address(self, a):
self.address = a
def set_phone(self, p):
self.phone = p
def get_name(self):
return self.name
def get_address(self):
return self.address
def get_phone(self):
return self.phone
def main():
n = input('Enter Customer Name: ')
a = input('Enter the Customer Address: ')
p = input('Enter the Customer Phone Number: ')
person = Person(n, a, p) # create the instance
# get attributes of instantiated object
print(person.get_person())
print(person.get_address())
print(person.get_phone())
main()