Во время практики наследования в Python 3 выдается ошибка - PullRequest
1 голос
/ 14 апреля 2020

Когда я выполняю, выдает ошибку:

 ....
  ......
    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()

Ответы [ 3 ]

0 голосов
/ 14 апреля 2020

вы можете определить свой класс Dog следующим образом:

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

ваш атрибут класса numberoflegs не нужно Dog.

вы получаете ошибку, потому что вы пытаясь использовать класс во время «создания», прежде чем даже получить Dog класс

0 голосов
/ 14 апреля 2020

Изменение:

class Dog(Pet):
    Dog.numberoflegs = 4

на:

class Dog(Pet):
    numberoflegs = 4

У него уже есть область действия класса, и вы не можете ссылаться на класс по имени, поскольку он все еще определены.

0 голосов
/ 14 апреля 2020

Атрибуты класса просто добавляются в класс - без префикса имени класса:

class Dog(Pet):
    numberoflegs = 4
    # etc

class Fish(Pet):
    numberoflegs = 0

Вы можете изменить его, используя Dog.numberoflegs = 3 (если у вас 3-хногие собаки по умолчанию).

Атрибуты класса являются общими для всех экземпляров.

См.

...