如何将文件名作为类变量传递?
Posted
技术标签:
【中文标题】如何将文件名作为类变量传递?【英文标题】:How to pass a filename as a Class variable? 【发布时间】:2022-01-15 23:54:04 【问题描述】:我正在尝试构建一个 Tkinter 应用程序,它允许您加载文档然后分析它们。我必须承认我仍然在掌握面向对象的编程,如果这是一个简单的答案,我深表歉意。
我已经构建了这个类来保存应用程序其余部分使用的文件路径变量。
class Inputs:
def __init__(self, CV, JS):
self.CV = CV
self.JS = JS
def cv(self, input):
self.CV = input
def js(self, input):
self.JS = input
但是每次我尝试通过以下内容时:
b = ‘CV_test.txt’
Inputs.cv(b)
我收到以下错误。
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-5-f21fa013f9ae>", line 1, in <module>
Inputs.cv(b)
TypeError: cv() missing 1 required positional argument: 'input'
不能将文件路径作为类变量传递吗?
补充问题:这种方法能否让我以后在其他类中调用这些变量?
【问题讨论】:
你需要Inputs.CV("CV_Test.txt")
吗?顺便说一句,我不会使用 input
作为变量名。 inputs
是你已经初始化的对象吗?
当您直接访问class
methods
时,您不会创建该类的实例,因此不会传递self
。将其设为@staticmethod
您定义了实例变量,而不是类变量。相关:***.com/questions/8959097/…
【参考方案1】:
类变量在__init__
之外定义:
class Inputs:
CV = None
JS = None
SELF_JS = None
def cv(self, inp):
Inputs.CV = inp
def js(self, inp):
Inputs.JS = inp
def self_js(self, inp):
# this dont work...
self.SELF_JS = inp
Inputs.CV = 'CV_Test.txt'
my_inputs1 = Inputs()
my_inputs1.js('JS_Test.txt')
my_inputs1.self_js('SELF_Test.txt')
my_inputs2 = Inputs()
print(my_inputs2.JS)
print(my_inputs2.CV)
print(my_inputs2.SELF_JS) # Not available in my_inputs2 !!
输出:
JS_Test.txt
CV_Test.txt
None
【讨论】:
谢谢你,太完美了!以上是关于如何将文件名作为类变量传递?的主要内容,如果未能解决你的问题,请参考以下文章