Итак, я делал ролевую игру и столкнулся с некоторыми проблемами с наследованием и распаковкой. Я попытался сделать простую версию проблемы, с которой я сталкиваюсь:
class Animal():
def __init__(self,name):
self.name = name
def say_noise(self):
noise = "I am an animal"
by_who = "Animal"
return noise,by_who
class Dog(Animal):
def __init__(self,name):
self.name = name
def say_noise(self):
Animal.say_noise(self)
animal = Animal("man")
doggy = Dog("name")
Что я хочу сделать, так это вернуть те же две вещи в классе Animal и классе Dog. Теперь, когда я делаю say_noise() с моим Animal, он работает нормально, поскольку возвращает:
('I am an animal', 'Animal')
Однако он ничего не возвращает, когда я делаю это с классом Dog, и я также пытался их распаковать (что я и собираюсь сделать в своем реальном коде), но когда я это делаю.
a,b =doggy.say_noise()
он просто возвращает это:
TypeError: невозможно распаковать неитерируемый объект NoneType
Как я могу вернуть то же самое с тем же методом класса, только унаследовав его от родительского класса?
Dog.say_noise
, например.return Animal.say_noise(self)
- person Heike   schedule 14.01.2020Dog.__init__()
является просто копией-вставкойAnimal.__init__()
, поэтому вы должны просто удалить его. - person bruno desthuilliers   schedule 14.01.2020