Я думаю, что вы можете упустить момент о занятиях здесь, что имеет решающее значение для того, чего вы хотите достичь.
Давайте сначала определим класс Cat
, но внимательно рассмотрим различия с вашими.
class Cat:
def __init__(self, name):
self.name = name
def say_hello(self):
return self.name
А теперь посмотрите на магию, и я объясню это позже:
cat = Cat("Sally")
print(cat.say_hello())
>>> "Sally"
Что произошло по сравнению с вашим кодом?
Во-первых, ваш __init__
метод не принимает аргумент. Моя версия делает, и это name
. Кроме того, я присвоил его переменной экземпляра self.name
.
С этим назначением я могу получить доступ к имени, предоставленному при создании в КАЖДОМ методе, который имеет self
в качестве первого аргумента. Что такое инстанцирование?
Ну, в вашем коде вы назвали x = Cat
. При этом x является объектом класса, но не экземпляром. Вам нужно создать экземпляр своего класса.
Сделав это в моем коде cat = Cat("Sally")
, Python вызывает метод __init__
класса и возвращает его экземпляр с каждым набором / выполнением, как указано в методе __init__
.
В моем случае я установил self.name = name
, что делает, например, значение self.name
равным "Sally".
Поэтому всякий раз, когда я вызываю self.name
в методе, который включает в себя self
в своих параметрах, он становится, после создания экземпляра, «Салли».
Теперь класс Cat
должен быть чистым.
Что теперь делать?
Просто наследуй от этого класса!
См:
class Cat:
def __init__(self, name):
self.name = name
def say_hello(self):
return self.name
class Kitten(Cat):
def __init__(self, name):
# This is done for convenience
super().__init__(name)
При этом у Kitten-, как у экземпляра Cat, есть имя, и он наследует метод say_hello()
, чтобы сказать, что это имя.
Надеюсь, это поможет.