'抓住'局部变量而不返回

时间:2016-05-09 16:21:31

标签: python-3.x

我不完全确定如何说出来,但我会解释我要做的事情。

def function(self):
    x = "x"
    y = "y"
    z = "z"

通过将此函数创建为类的唯一对象,我应该为变量本身分配内存。在创建类对象和调用此函数时,如何直接从此函数中获取变量?

(即class.function.x

我不是要求return语法,我希望直接内存映射(或调用)此变量而不返回值。

3 个答案:

答案 0 :(得分:1)

没有。函数返回时会破坏范围,并且所有局部变量都会被破坏。

答案 1 :(得分:1)

我不相信这些变量在函数运行之前被实例化,并且在函数返回时超出范围。如发布,我不认为你想要的是什么(很高兴得到纠正)。

但是你可以这样做,

class A(object):
    def f(self):
        pass
A.f.b = 42

当你上课时。然后可以访问A.f.b

答案 2 :(得分:1)

基本方法只记住符号,绑定在调用时发生。

Python绑定101

一个类可以绑定变量,因此实例(对象)和方法调用都可以更改实例和类变量。

http://ideone.com/KkzhRk

class Binder(object):
    x = "x"
    y = "y"
    z = "z"

    def f1(self):
        self.x = "xx"
        self.y = "yx"
        self.z = "zx"

    def f2(self):
        Binder.x = "xx"
        Binder.y = "yx"
        Binder.z = "zx"

binder = Binder()

print(Binder.x)  # class access
print(Binder.y)  # class access
print(Binder.z)  # class access
print(binder.x)  # instance access
print(binder.y)  # instance access
print(binder.z)  # instance access

binder.f1()

print(Binder.x)  # class access
print(Binder.y)  # class access
print(Binder.z)  # class access
print(binder.x)  # instance access
print(binder.y)  # instance access
print(binder.z)  # instance access

binder.f2()

print(Binder.x)  # class access
print(Binder.y)  # class access
print(Binder.z)  # class access
print(binder.x)  # instance access
print(binder.y)  # instance access
print(binder.z)  # instance access

还有闭包主题 - 嵌套方法绑定封闭方法的值。

http://ideone.com/bBnUJG

def mkclosure():
    x = "x"
    y = "y"
    z = "z"

    def closure():
        # Need to reference them for the closure to be created.
        return (x, y, z)

    return closure

function = mkclosure()

for cell in function.__closure__:
    print(cell.cell_contents)