Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python 3中练习继承时引发错误_Python_Inheritance_Parent Child - Fatal编程技术网

在Python 3中练习继承时引发错误

在Python 3中练习继承时引发错误,python,inheritance,parent-child,Python,Inheritance,Parent Child,当我执行时,它抛出错误: .... ...... class Dog(Pet): File "D:\untitled2\Pet.py", line 13, in Dog Dog.numberoflegs = 4 NameError: name 'Dog' is not defined Fish.numberoflegs = 0 NameError: name 'Fish' is not defined 请帮忙 class Pet: numberoflegs =

当我执行时,它抛出错误:

 ....
  ......
    class Dog(Pet):
  File "D:\untitled2\Pet.py", line 13, in Dog
    Dog.numberoflegs = 4
NameError: name 'Dog' is not defined
Fish.numberoflegs = 0
NameError: name 'Fish' is not defined
请帮忙

class Pet:
    numberoflegs = 0
    def sleep(self,name):
        print("the {} sleeps".format(name))
    def countlegs(self):
        print("I have {} legs".format(self.numberoflegs))


#type = input("enter pet type")
#dog.sleep(type)

class Dog(Pet):
    Dog.numberoflegs = 4
    def bark(self):
        print ("the dog sounds woof")

class Fish(Pet):
    Fish.numberoflegs = 0


kuta = Dog()
kuta.countlegs()
kuta.bark()
machi = Fish()
machi.countlegs()

类属性只是添加到类中,而不是以类名作为前缀:

class Dog(Pet):
    numberoflegs = 4
    # etc

class Fish(Pet):
    numberoflegs = 0
您可以使用
Dog.numberoflegs=3
更改它(如果默认情况下您有三条腿的狗)

类属性在所有实例之间共享

  • 对于一些造型技巧-您的命名约定与建议的有很大不同

类属性只是添加到类中,而不是以类名作为前缀:

class Dog(Pet):
    numberoflegs = 4
    # etc

class Fish(Pet):
    numberoflegs = 0
您可以使用
Dog.numberoflegs=3
更改它(如果默认情况下您有三条腿的狗)

类属性在所有实例之间共享

  • 对于一些造型技巧-您的命名约定与建议的有很大不同

您可以通过以下方式定义您的类

class Dog(Pet):
    numberoflegs = 4
    def bark(self):
        print ("the dog sounds woof")
您的类属性
numberoflegs
不需要
狗。


您之所以会出现错误,是因为您试图在“创建”时使用该类,甚至在使用
Dog
class

之前,您可以通过以下方式定义您的类
Dog

class Dog(Pet):
    numberoflegs = 4
    def bark(self):
        print ("the dog sounds woof")
您的类属性
numberoflegs
不需要
狗。

出现错误是因为您试图在“创建”时使用该类,甚至在更改
类之前:

class Dog(Pet):
    Dog.numberoflegs = 4
致:

它已经具有类的作用域,您还不能按名称引用该类,因为它仍在定义中。

更改:

class Dog(Pet):
    Dog.numberoflegs = 4
致:


它已经具有类的范围,您还不能按名称引用该类,因为它仍在定义中。

非常感谢您花时间进行如此详细的解释!:)我刚刚开始学习使用Python3.7开发web应用程序。你能推荐一些更好的教程吗?因为我现在正在学习的教程有你注意到的问题。我只是尝试为每个动物使用单独的文件来运行我的上述代码,在同一个项目目录中继承动物超类。现在它不会抛出任何异常。但是,运行包含
kuta=Dog()kuta.countlegs()kuta.bark()machi=Fish()machi.countlegs()
@kederr的mian.py没有显示出我所期望的输出,-1答案中有+130/+145级副本的内部链接。但是你当然是对的-将链接改为直接链接而不是间接链接非常感谢你花时间做了如此详细的解释!:)我刚刚开始学习使用Python3.7开发web应用程序。你能推荐一些更好的教程吗?因为我现在正在学习的教程有你注意到的问题。我只是尝试为每个动物使用单独的文件来运行我的上述代码,在同一个项目目录中继承动物超类。现在它不会抛出任何异常。但是,运行包含
kuta=Dog()kuta.countlegs()kuta.bark()machi=Fish()machi.countlegs()
@kederr的mian.py没有显示出我所期望的输出,-1答案中有+130/+145级副本的内部链接。但你当然是对的——将链接改为直接链接,而不是间接链接