我想在一个类中构建一个方法,并从该类中获取默认值参数。通常,我会对某些数据进行过滤。在我的班级内部,我有一个方法,通常我会传递数据向量。有时我没有矢量,而是获取了模拟html" target="_blank">数据。每次我不传递特定向量时,我都希望默认情况下获取模拟数据。我认为在我说的方法定义中应该很容易构造a=self.vector
。但是由于某种原因,我有一个错误NameError: name 'self' is not defined
。简化的结构是:
class baseClass(object): # This class takes an initial data or simulation
def __init__(self):
self.x = 1
self.y = 2
class extendedClass(baseClass): # This class does some filtering
def __init__(self):
baseClass.__init__(self)
self.z = 5
def doSomething(self, a=self.z):
self.z = 3
self.b = a
if __name__ == '__main__':
a = extendedClass()
print a.__dict__
a.doSomething()
print a.__dict__
我期望的输出应该是:
{'y': 2, 'x': 1, 'z': 5}
{'y': 2, 'x': 1, 'z': 3, 'b': 5}
我尝试了默认分配,因为def doSomething(self, a=z):
它显然无法正常工作。据我了解self.z
,该范围是可见的,将其作为默认值应该不是问题。不知道为什么会有这个错误以及如何解决。这可能是一个简单的问题,但我试图弄清楚它或找到解决方案已经有一段时间了。
您的理解是错误的。self
本身就是该函数定义的参数,因此在那时它不可能在范围内。它仅在函数本身的范围内。
答案很简单,就是将参数默认为None
,然后在方法中检查该参数:
def doSomething(self, a=None):
if a is None:
a = self.z
self.z = 3
self.b = a
问题内容: 浏览Java API源代码时,我经常看到方法参数已重新分配给局部变量。为什么要这样做? 这在java.util.HashMap中 问题答案: 这是线程安全性/更好性能的规则。在易失。如果将变量分配给局部变量,它将变为局部堆栈变量,该变量自动是线程安全的。而且,修改局部堆栈变量不会强制“先发生”,因此在使用它时不会产生同步损失(与之不同的是,每次读/写操作都会导致易失性,这会花费您获取/
从性能还是从其他因素来看,哪一种方法更好? 假设我正在创建一个类,其中有一个方法,它接受2个值并将它们相加在一起。 是有两个实例变量来存储两个值,然后有一个方法来使用这些值更好,还是在调用方法时将变量作为参数传入更好? 或者仅仅使用静态方法更好,这样我就不需要在每次使用该方法时创建对象了?
当用Katalon Studio定义测试用例变量时,我如何将他的默认值设置为全局变量值?
你好,我在小部件上的以下代码中出错 参数类型'List 这是我的代码 我的代码与上面的图表插件不兼容吗?如何解决这个问题?
如果未在 Go 中设置环境变量,如何分配默认值? 在Python中,我可以做其中是默认值,如果env var未设置。 我尝试了基于 os 的 if 语句 是空的,但由于 if 语句中的变量赋值范围,这似乎不起作用。而且我正在检查多个 env var,所以我无法在 if 语句中对这些信息采取行动。