Так что я продолжаю получатьОбъект not inheretinting функции от суперкласса?
error: " AttributeError: 'Dog' object has no attribute '_Dog__name'"
Дело в том, print(spot.get_name())
работает отлично. Также, когда я пробовал spot.multiple_sounds()
, это не так. Я думаю, что проблема заключается в том, что я пытаюсь вызывать атрибуты объектов из суперкласса в функции в определении объекта. Однако я не понимаю, почему. Я делаю все это из учебника, и код идентичен его. Я думаю, это может быть потому, что он использует python2.x, и я использую spyder python3.x, но я понятия не имею. Любая помощь приветствуется.
import random
import os
import sys
class Animal:
__name = ""
__height = 0
__weight = 0
__sound = 0
def __init__(self,name,height,weight,sound):
self.__name = name
self.__height = height
self.__weight = weight
self.__sound = sound
def set_name(self, name):
self.__name = name
def get_name(self):
return(self.__name)
def set_height(self, height):
self.__height = height
def get_height(self):
return(self.__height)
def set_weight(self, weight):
self.__weight = weight
def get_weight(self):
return(self.__weight)
def set_sound(self, sound):
self.__sound = sound
def get_sound(self):
return(self.__sound)
def get_type(self):
print("animal")
def toString(self):
return("{} is {} cm tall and {} kilograms and says {}".format(self.__name,
self.__height,
self.__weight,
self.__sound))
cat = Animal('Whiskers', 33, 10,'Meow')
print(cat.toString())
class Dog(Animal):
__owner = ""
def __init__(self, name, height, weight, sound, owner):
self.__owner = owner
super().__init__(name, height, weight, sound)
def set_owner(self,owner):
self.__owner = owner
def get_owner(self):
return self.__owner
def get_type(self):
print("Dog")
def toString(self):
return "{} is {} cm tall and {} kilograms says {} and his owner is {}".format(self.__name, self.__height, self.__weight, self.__sound, self.__owner)
def multiple_sounds(self, how_many=None):
if how_many is None:
print(self.getsound())
else:
print(self.getsound()*how_many)
spot = Dog("Spot", 53, 27, "Ruff", "Some Guy")
print(spot.get_name())
print(spot.toString())
Небольшие примеры лучше ... вы можете обрезать большую часть, что из в пример программы, который легче читать, но демонстрирует проблему. – tdelaney
@ e4c5 - Я не думаю, что это достаточно близко для дурака. В основном речь идет о специальных методах, таких как '__init__'. – tdelaney
ok @tdelaney retracting – e4c5