проблема с оператором "self" при наследовании от класса, который я написал - PullRequest
0 голосов
/ 05 октября 2018

Я определил два класса в одном файле.Мне удалось запустить его после разделения классов на два файла, но я хотел знать, почему первая попытка не работает.

Трассировка гласила:

Traceback (most recent call last):
  File "Polygon.py", line 15, in <module>
    class Triangle(Polygon):
  File "Polygon.py", line 21, in Triangle
    print(self.sides)
NameError: name 'self' is not defined

, и голый код моего кода был следующим:

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]
class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

Он выдал ту же ошибку NameError, когда я запустил это как телокласса Треугольник

class Triangle(Polygon):
    self.a = 1

1 Ответ

0 голосов
/ 05 октября 2018

Похоже, что вы пытаетесь сделать, это определить атрибут класса a в классе Triangle.Вам не нужно self, чтобы сделать это.self используется для доступа к экземпляру объекта класса.

Если вы хотите определить a как атрибут объекта, а не атрибут класса, вы должны сделать что-то вроде:

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self, 3)
        self.a = 1

В этом случае a определяется только при создании экземпляра класса и доступен как Triangle().a или как self.a внутри других методов области объекта.

И если вы хотите определить a в качестве атрибута класса просто выполните:

class Triangle(Polygon):
    a = 1

    def __init__(self):
        ...

В этом случае a определяется по определению класса и доступно даже до создания экземпляра, как Triangle.a

...