Python继承-实例没有属性



我是python的新手,只是想测试语法并了解它。下面的代码工作得很好,除了继承时。最后一个命令"toString"函数不起作用,我一辈子都想不出原因。

我确信我做事情的方式不是最有效的,但即使有更有效的方式,我也首先想明白为什么我做的事情是错误的。非常感谢。如果我需要澄清任何,请告诉我

#!/bin/python
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.__heiight
        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 {} inches tall, {} lbs, and says {}".format(self.__name, self.__height,self.__weight,self.__sound))

objCat = Animal('Whiskers', 33, 10, 'Meow')
print (objCat.toString())

# Attempt Inheritance
class cDog(Animal):
        __owner=""
        def __init__(self,name,height,weight,sound,owner):
                self.__owner=owner
                Animal.__init__(self,name,height,weight,sound)
        def __str__(self):
                return ("{}".format(self.__height))
        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 {} inches tall, {} lbs, says {}, and is owned by, {}".format(self.__name,self.__height,self.__weight,self.__sound,self.__owner))

objDog = cDog('Brewsky', 20, 75, 'Ruff', 'Jared')
print (objDog.toString())

Animal类中,属性名称前的双下划线使它们(有点)私有。

只需删除双下划线(如果你想保留一个弱指示符,可以将其更改为一个下划线),它就会被修复。有关详细信息,请参阅此问题。

最新更新