在调用另一个文件时,我正在努力理解一个类的 __init __ 函数。这已经被问了很多,我必须休息一天,因为我根本无法让它工作!好吧,我收回那个......如果我只使用 __init __ 或者根本不使用它,它就可以工作。这可能是我遗漏的愚蠢和明显的东西 - 这是最新的 ::
from controller import appkey , appconf
# log file gets created in here #
app_process = appkey.generate(logfile)
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”。
感谢您的反馈。谢谢!
答案 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
也是一个实例变量,当没有其他东西传入时,它会引用对象本身。但是,由于您传入的是 logfile
,self
被设置为 logfile
它尝试调用(基本上)logfile.logfile
(即尝试调用字符串的实例变量)。