从我编写的类继承时出现“自我”运算符问题

时间:2018-10-05 04:04:34

标签: python class inheritance self

我在一个文件中定义了两个类。将类分成两个文件后,我能够运行它,但是我想知道为什么第一次尝试不起作用。

回溯显示为:

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)

当我将其作为Triangle类的正文运行时,它引发了相同的NameError

class Triangle(Polygon):
    self.a = 1

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试做的是在类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来访问