如何访问在类作用域内指定的属性,而不是在python中访问函数作用域?

How to access an attribute specified inside class scope, but not function scope in python?

提问人:Ougaga 提问时间:4/18/2023 更新时间:4/18/2023 访问量:17

问:

我想将该值分配给在类中定义的变量,但在该函数的每个方法之外。这感觉很糟糕,但为了一个简短的问题,让我们假设由于遗留代码,我无法改变它的实现方式。my_strmy_out_of_scope_var2A

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

python-3.x 方法 属性

评论


答:

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__AA