【问题标题】:Is there a better way of remembering previously given optional method arguments in Python?有没有更好的方法来记住 Python 中先前给定的可选方法参数?
【发布时间】: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)。 (我不确定你想用tryexcept 子句实现什么,但我认为这在这里并不重要)
  • 好吧,try,except 在前两次被调用时存在,self.x 尚未定义。没有它,我最终会得到一个AttributeError。我主要是在寻找一种避免这些线条的方法,看起来 Taras Savchyn 的回答为我提供了这一点。
  • 如果 Taras Savchyn 的回答解决了您的问题,那么请将其标记为已接受的答案!

标签: python class methods arguments


【解决方案1】:

您也可以使用类属性来做到这一点。这里我们使用类属性x先存储我们的默认值,然后再存储之前输入的值:

代码:

class someclass:
    x = None
    def test(self, x=x):
        if x:
            someclass.x = "yes " + str(x)
        if someclass.x:
            print(someclass.x)

a = someclass()

a.test()
a.test()
a.test(5)
a.test()
a.test()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2011-08-22
    • 2011-12-08
    • 2012-07-06
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多