首页 > 解决方案 > 如何在另一个 python 文件中的方法中使用变量的值?

问题描述

我在类name内部的方法中有变量。control_in(self)Test

我试图name通过执行以下操作来创建属性:

a) setattr(control_in, name"Harry Banes") b) control_in.name = "Harry Banes"

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

我也尝试过return namereturn control_in.namecontrol_in(self) 方法结束时

并且 none 打印 name 变量的值。但是我在init方法中放入的所有内容都会打印出来。以print(t1.n)打印为例:numbers.

是的,我已经搜索并尝试了很多其他 StackOverflow Q&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以外的另一个类的方法中的值。我为什么要这个?因为这是一个问题,我有一个更大的代码,我只需要一个变量就可以在另一个函数中发生某些事情,从另一个 python 文件,但我不知道如何获取变量值。

标签: pythonpython-3.x

解决方案


首先,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)

推荐阅读