如何在另一个python文件中的方法中使用变量的值?

时间:2019-04-15 16:04:38

标签: python python-3.x

我在方法name内有变量control_in(self),它在类Test内。

我尝试通过以下方式将name设置为属性:

a)setattr(control_in,name,“ Harry Banes”) b)control_in.name =“哈里·贝恩斯”

在文件b.py中,我尝试使用: a)from a import * b)import a c)from a import Test a.a)print(a.Test.control_in.name) a.b)print(t1.control_in.name) a.c)print(a.t1.control_in.name) a.d)代码的每一部分都global name(我知道这没用,但我想提一下我已经尝试过了。)

在control_in(self)方法末尾,我也尝试过return namereturn control_in.name

,没有一个显示名称变量的值。但是我放入 init 方法的所有内容都可以打印。以print(t1.n)为例,其中显示:numbers

是的,我已经搜索并尝试了许多其他StackOverflow问题与解答所没有的解决方案,这就是为什么我要亲自问这个问题。

a.py

import b

class Test:
    def __init__(self):
        self.n = "numbers"

    def control_in(self):
        control_in.name = "Harry Banes"

if __name__ == '__main__':
    pass

b.py

from a import *

if __name__ == '__main__':

    t1 = Test()

    print(t1.n) # Successfuly prints "numbers"
    print(t1.control_in.name) # Throws attribute error

我希望输出“ Harry Banes”,但我收到此错误:AttributeError: 'function' object has no attribute 'name'

我想在另一个文件中使用 init 以外的其他Class方法的值。为什么我要这个?因为这是一个问题,所以我需要一种更大的代码,其中我只需要一个变量即可使另一个Python文件中的另一个函数中发生某些事情,但是我不知道如何获取变量值。

1 个答案:

答案 0 :(得分:0)

首先,control_in.name = "Harry Banes"不是有效的代码,因为不能仅通过其名称而是通过其类来引用类方法:

def control_in(self):
    Test.control_in.name = "Harry Banes"

或更妙的是,使用self.__class__来引用该类:

def control_in(self):
    self.__class__.control_in.name = "Harry Banes"

第二,在调用Test.control_in.name方法之前,control_in才被定义,因此必须专门调用它:

t1 = Test()
t1.control_in()
print(t1.control_in.name)

这将输出:

Harry Banes

但是,最后,通常没有充分的理由向功能对象添加属性。在这种情况下,Test.control_in.name变量绑定到一个类方法,因此在所有实例之间共享,因此应更习惯地将其重新定义为一个类变量:

class Test:
    name = "Harry Banes"

这样您就可以只用name来访问Test.name

print(Test.name)