Я изучаю Python, и я пытаюсь имитировать карточную игру. У меня есть вопрос относительно точка нотация. Я просмотрел по всему Интернету конкретный ответ, но не смог его найти.Точечная запись в Python. Должен ли метод проходить до или после объекта?
Почему это, что иногда нас учат вызывать метод точечной нотации, как это:
object.methodName()
В то время как другие времена, мы показали, называть это так:
className.methodName(object)
Что это разница?
Вот пример. Это определение метода из книги (Как думать, как ученый)
class Hand(Deck):
def __init__ (self, name = " "):
self.cards = []
self.name = name
def __str__(self):
s = "Hand "+ self.name
if self.isEmpty():
return s+" is empty\n"
else:
return s+ " contains\n" + Deck.__str__(self)
Иногда объект предшествует метод:
self.isEmpty()
Иногда объект приходит после того, как метода, в круглых скобках :
Deck.__str__(self)
Какой метод мы используем? Это имеет значение?
'Deck' - это * класс *, а' Deck .__ str__' - это несвязанный метод. Если вы попробуете 'self .__ str __()' вместо этого, вы снова вызовете метод 'Hand .__ str __()' (вызывая бесконечную ошибку рекурсии), вы хотите родительский класс, поэтому он вызывается явно. –
Однако вызов такого класса не рекомендуется. Вместо этого используйте 'super() .__ str __()' (и пусть 'super()' определяет, что такое родительский класс, и как правильно найти 'Deck .__ str__'' 'self'. –
Вы перепробовали метод '__str__' в подклассе' Hand', поэтому это необходимо для вызова родительской версии '__str__'. Как уже упоминалось, вы должны сделать 'super() .__ str __()' вместо этого, поскольку он имеет дело с более сложными структурами наследования. – tdelaney