#python #python-3.x
#python #python-3.x
Вопрос:
Я не понимаю, почему этот код работает, я думаю, он должен выдавать ошибку, но это не так:
class Person:
def __init__(self, name):
self.name = name
def greeting(self):
# Should return "hi, my name is " followed by the name of the Person.
return "hi, my name is " self.name
def __str__(self):
return "str"
some_person = Person("foo")
print(print(some_person.greeting()))
В __init__
методе я пытаюсь получить доступ к переменной, которая на самом деле не определена (не должно быть ошибки?)
и в greeting
методе я пытаюсь получить доступ к той переменной, которая только что определена в __init__
(разве это не должно быть ошибкой?). Он не выдает никаких ошибок и работает бесперебойно? как это возможно?
Комментарии:
1.
print(print(some_person.greeting()))
должен печатать None, потому что это то, что возвращается из внутреннего2. Почему вы считаете, что должна быть какая-либо ошибка? В
__init__
вы определяете новый атрибут (self.name
) из существующего аргумента функции (name
). Этот код в полном порядке…
Ответ №1:
def __init__(self, name):
self.name =name
Фактически, вы пытались получить доступ к переменной, которая фактически определена. name
определяется в параметре функции.
Ответ №2:
Это не должно быть ошибкой! Это потому, что self — это сам объект (вы понимаете, почему он вызывается self
?) поэтому, если вы определяете что-то в __init__
функции, оно сохраняется внутри объекта, поэтому вы можете использовать его из другой функции, отделив его от самого объекта. name
Переменная, о которой вы говорили, определена в определении функции! Где вы помещаете __init__(self,
имя )
Комментарии:
1. Спасибо, приятель, я это понял. Я пришел с java, что что-то подобное абсолютно неправильно (я относился к self как к «этому» в java), но теперь это совершенно ясно.