【发布时间】:2019-05-07 14:12:07
【问题描述】:
所以我一直在摆弄类,试图理解它们,并且发现需要让我的方法记住以前给出的参数。这是因为我想在不传递新参数的情况下触发一个方法,而只使用以前的相同参数。 由于我是从其他地方触发的,我认为尝试让类记住变量并在没有传递新参数时使用内存会更容易。
我最终得到的基本上是这样的:
class someclass:
def test(self, x=None):
if x:
self.x = "yes " + str(x)
try:
print(self.x)
except AttributeError:
pass
a = someclass()
a.test()
a.test()
a.test(5)
a.test()
a.test()
所以前两次调用,self.x 尚未定义,所以它通过了。此后的任何时候,它都会记住只给出一次的 5。
所以我的问题主要是是否有更简单/更好的方式来编写这个块,但如果这是某种不好的做法,以后会给我带来问题。
【问题讨论】:
-
是的,这是一种完全有效的方法。事实上,这正是实例属性的用途。他们在那里存储您的实例的
state。在这种情况下,您的函数会将self.x的状态更新为"yes " + str(x)。 (我不确定你想用try、except子句实现什么,但我认为这在这里并不重要) -
好吧,
try,except在前两次被调用时存在,self.x尚未定义。没有它,我最终会得到一个AttributeError。我主要是在寻找一种避免这些线条的方法,看起来 Taras Savchyn 的回答为我提供了这一点。 -
如果 Taras Savchyn 的回答解决了您的问题,那么请将其标记为已接受的答案!
标签: python class methods arguments