如何将文件名作为类变量传递?

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

【讨论】:

谢谢你,太完美了!

以上是关于如何将文件名作为类变量传递?的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量从 ViewController 类传递给其他结构?

如何将类成员变量传递给另一个组件角度?

如何将变量的值从java类传递到jsp页面

PyQt5:如何将变量传递给类?

如何将 C# 类字符串变量传递给 sbyte* 参数?

在java中,将局部变量作为参数传递到另一个类的方法里,在此方法里改变参数值,局部变量会改变吗