2016-06-20 93 views
-1
class Animal: 
    __name = None 
    __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 = None 

    def __init__(self, name, height, weight, sound, owner): 
     self.__owner = owner 
     super(Dog, self).__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 and says {}. His owner is {}'.format(self.set_name(), 
                        self.set_height(), 
                        self.set_weight(), 
                        self.set_sound(), 
                        self.set_owner()) 

    def multiple_sounds(self, how_many=None): 
     if how_many is None: 
      print(self.get_sound()) 
     else: 
      print(self.get_sound() * how_many) 


spot = Dog('Spot', 53, 27, 'Ruff', 'Derek') 
print(spot.toString()) 

当我继承它时,构造函数有问题吗? 为什么这个错误发生在第66行? 错误是:TypeError:set_name()缺少1个必需的位置参数:'name'

TypeError: set_name() missing 1 required positional argument: 'name'

也有在行其他错误80.

+1

你为什么使用静态初始化? '__name = None'和其他?不需要使用它,因为存在初始化全部的构造函数 – nikniknik2016

+1

这实际上不是你如何在Python中编写类。 –

回答

0

的问题是,你在Dog类的toString方法使用set..()代替get_..()

def toString(self): 
    return '{} is {} cm tall and {} kilograms and says {}. His owner is {}'.format(self.get_name(), 
                       self.get_height(), 
                       self.get_weight(), 
                       self.get_sound(), 
                       self.get_owner()) 

而且你应该删除变量:

class Animal: 
    __name = None 
    __height = 0 
    __weight = 0 
    __sound = 0 

    def __init__(self, name, height, weight, sound): 

class Animal: 

    def __init__(self, name, height, weight, sound): 

有没有理由让他们!

相关问题