为什么我的类的 init 函数没有运行?

时间:2021-07-12 19:37:56

标签: python python-3.x python-3.9

在调用另一个文件时,我正在努力理解一个类的 __init __ 函数。这已经被问了很多,我必须休息一天,因为我根本无法让它工作!好吧,我收回那个......如果我只使用 __init __ 或者根本不使用它,它就可以工作。这可能是我遗漏的愚蠢和明显的东西 - 这是最新的 ::

文件夹结构

    • 控制器
      • __init __.py
    • main.py

文件 1 - main.py
from controller import appkey , appconf
# log file gets created in here #
app_process = appkey.generate(logfile)

文件 2 - controller.__init __.py
from public import printlog

class appkey(object) :
    def __init__(self,logfile) :
        self.logfile = logfile

    def generate(self) :
        printlog.log( message = f'Generating runtime key for application instance.'
## <<<< ERROR HAPPENS HERE | AttributeError: 'str' object has no attribute 'logfile' >>>> ##
                , file = self.logfile ### <-- 
                , level = 'info' )

        try :
            <<<< stuff >>>>
            return run_ , key_
    except :
      <<<< mayday | exit >>>>

一旦进入 controller.__init __.py 文件,Visual Studio 就会将 self: 'runtime/application_logs/12072021-122743' 显示为一个变量,但它永远不会变成“self.logfile”。

感谢您的反馈。谢谢!

2 个答案:

答案 0 :(得分:1)

问题是您没有在任何地方创建 appkey 对象,而是试图在 类本身(不是类的实例)上调用 generate。当您应该将 logfile 传递给构造函数时,您也将它传递给 generate 方法。

您可以将 main.py 中的代码更改为此或类似的内容:

# Call the constructor first to create an appkey object, named 'a'
a = appkey(logfile)
# Now call generate on it
app_process = a.generate()  

答案 1 :(得分:1)

您需要先创建类对象,然后在 generate 中调用 main.py 方法。

from controller import appkey , appconf
# log file gets created in here #
appkey_obj = appkey(logfile)
app_process = appkey_obj.generate()

您正在设置 self.logfile 的值(即 logfile 实例变量) when you create the object. Since it is an instance variable, you do not need to pass it into the generate` 方法。

您收到该错误是因为当您将 logfile 传递给 generate 时,self 中的 generate 参数被设置为 logfile 字符串值。 self 也是一个实例变量,当没有其他东西传入时,它会引用对象本身。但是,由于您传入的是 logfileself 被设置为 logfile它尝试调用(基本上)logfile.logfile(即尝试调用字符串的实例变量)。