首页 > 解决方案 > 从我编写的类继承时出现“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

标签: pythonclassinheritanceself

解决方案


看起来您正在尝试做的是a在 class中定义一个类属性Triangle。你不需self要这样做。self用于访问类的对象实例。

如果您想定义a为对象属性而不是类属性,您应该执行以下操作:

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

在这种情况下,a仅在类实例化时定义并可作为Triangle().aself.a在其他对象范围方法内访问。

如果您想定义a为类属性,只需执行以下操作:

class Triangle(Polygon):
    a = 1

    def __init__(self):
        ...

在这种情况下,a根据类定义进行定义,甚至在实例化之前就可以访问,如Triangle.a


推荐阅读