全局名称未在继承的类中定义

2024-04-25 23:58:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python定义了一个抽象基类:

class calculator:
    __metaclass__ = ABCMeta

    @abstractmethod
    def __init__(self, fileName):
        path = './cartesians/'
        onlyFiles = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
        for elem in list(onlyFiles):
            test = elem.split('.')[0]
            if test != fileName.split('.')[0]:
                onlyFiles.remove(elem)
        self.onlyFiles = onlyFiles
        self.onlyFiles.sort()

    @abstractmethod
    def optimize(self):
        pass

mopac类继承自计算器类:

^{pr2}$

在主.py,我有:

from mopac import *

calc = mopac(inFile)
calc.optimize()

当我运行代码时,它告诉我:

File "main.py", line 50, in main
    calc.optimize()
  File "path/mopac.py", line 24, in optimize
    print self.test
NameError: global name 'self' is not defined

我不明白为什么这里把自我当作一个变量/属性。有人能帮忙吗?如果我去掉“打印”自我测试,那么它会给我同样的错误“self is not defined”与仅限self.only文件. 在


Tags: pathinpytestselfforosdef
2条回答

在Python中,应该将self指定为定义的第一个形式参数。在您的代码中,calculator是您的第一个形式参数,因此当它作为对象/实例方法调用时,它接受实例的值,并且没有可访问的形式参数self(导致报告的语法错误):

def optimize(self):
    print self.test
    for file in self.onlyFiles:
       do stuff
  def optimize(calculator):
        print calculator.test
        for file in calculator.onlyFiles:
           do stuff

The first argument of every class method, including init, is always a reference to the current instance of the class. By convention, this argument is always named self. In the init method, self refers to the newly created object; in other class methods, it refers to the instance whose method was called.

在本例中,您正在将“self”变量重命名为“calculator”。将其更改为self或将self重命名为calculator。在

More info

Other that may help you

相关问题 更多 >