python - 是否可以从方法调用变量而不作为返回变量传递?
问题描述
我正在为不同生态系统中的一些鸟类种群参数编写一个库。为了不重复代码,我想获取在先前方法中定义的一些变量,并在其他方法中使用这些变量,而不将此变量作为返回值传递。例如
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.
解决方案
在不弄乱变量范围的情况下实现此目的的一个好选择是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
,从而破坏了哨兵的目的。但事实并非如此,因为您在数学表达式中使用它。
推荐阅读
- java - Spring JPA在不同的查询中返回空列表
- c# - 在 C# 中将公共证书与私有 RSA 密钥相结合
- c++ - 动态数组:尝试正确扩展动态数组并尝试从函数返回非 NULL 值
- python - PySpark:如何根据事件创建自上次事件计数器和唯一标识符以来的时间?
- c# - 模型项为空
- ruby-on-rails - 尝试访问受 Devise JWT 保护的 API 时出现“没有可用的验证密钥”
- perl - 在 @INC 中找不到 MyModule/Config.pm
- grep - 如何在某种模式之后grep?
- macos - 带有 M1 的 Mac OS 在使用 glfw glew 时遇到错误
- mysql - MySQL:实现“条件主键”的正确方法