提问人:Ougaga 提问时间:4/18/2023 更新时间:4/18/2023 访问量:17
如何访问在类作用域内指定的属性,而不是在python中访问函数作用域?
How to access an attribute specified inside class scope, but not function scope in python?
问:
我想将该值分配给在类中定义的变量,但在该函数的每个方法之外。这感觉很糟糕,但为了一个简短的问题,让我们假设由于遗留代码,我无法改变它的实现方式。my_str
my_out_of_scope_var2
A
class A:
def __init__(self, my_str):
self.var1 = my_str
def get_var1(self):
return self.var1
my_out_of_scope_var2 = ''
# Ways NOT to do it
# my_out_of_scope_var2 = bar ----> not working, because bar is unknown here
# my_out_of_scope_var2 = get_var1 ----> will assign the function >get_var1< to my_out_of_scope_var2
# my_out_of_scope_var2 = self.var1 ----> does not work because self is unknown in this scope
# my_out_of_scope_var2 = self.get_var1() ----> also does not work because self is unknown here
我想要实现的是:
Foo = A('bar')
Foo.my_out_of_scope_var2
输出不是“”
,而是“bar”。
在这种混乱的不良做法中,我如何以一种好的方式实现这一目标?我想过使用或,装饰器喜欢或功能,但我就是无法得到它。__call__
__init__
@property
答:
2赞
Patrick Haugh
4/18/2023
#1
您可以通过类引用它来设置它。__init__
class A:
def __init__(self, my_str):
self.var1 = my_str
A.my_out_of_scope_var = my_str
def get_var1(self):
return self.var1
my_out_of_scope_var2 = ''
评论
0赞
Ougaga
4/19/2023
好。直到现在才知道,甚至可以访问我们此刻正在创建的对象!
1赞
Patrick Haugh
4/19/2023
这之所以有效,是因为每当您创建新实例时,里面的代码都会运行,但当您创建类本身时不会运行__init__
A
A
评论