我在方法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 name
和return 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文件中的另一个函数中发生某些事情,但是我不知道如何获取变量值。
答案 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)