首页 > 解决方案 > 是否可以从方法调用变量而不作为返回变量传递?

问题描述

我正在为不同生态系统中的一些鸟类种群参数编写一个库。为了不重复代码,我想获取在先前方法中定义的一些变量,并在其他方法中使用这些变量,而不将此变量作为返回值传递。例如

class asd:
    
    def __init__(self): 
        self.a = a
        self.b = b

    def fun1(self):
        self.a2 = self.a * 2

    def fun2(self):
        self.a4 = self.a2*2 #this is what i want to do. 

标签: pythonpython-3.x

解决方案


在不弄乱变量范围的情况下实现此目的的一个好选择是self.a2使用标记值进行初始化,通常是None.

然后你可以检查self.a2你的内部fun2()并做出相应的反应,即fun1()在表达式之前调用:

class asd:
        
    def __init__(self): 
        self.a = a
        self.b = b
        self.a2 = None

    def fun1(self):
        self.a2 = self.a * 2

    def fun2(self):
        if self.a2 is None:
            self.fun1()
        self.a4 = self.a2*2

实际上你也可以去掉 sentinel var,并hasattr()用作检查:

class asd:
    
    def __init__(self): 
        self.a = a
        self.b = b

    def fun1(self):
        self.a2 = self.a * 2

    def fun2(self):
        if not hasattr(self, "a2")
            self.fun1()
        self.a4 = self.a2*2

self.a2如果可以为您分配任何值(包括在内),这可能会很有用None,从而破坏了哨兵的目的。但事实并非如此,因为您在数学表达式中使用它。


推荐阅读