【问题标题】:Python: Why can't you use a self.variable as an optional argument in a method?Python:为什么不能在方法中使用 self.variable 作为可选参数?
【发布时间】:2019-06-11 03:09:06
【问题描述】:

我创建了一个类,我想在其中将 self.variable 传递给方法中的可选参数。原因是因为我想将信息存储在以其他方法制作的 Self.variable 中,但是,如果我使用该方法,我想选择用我自己的手动信息覆盖 self.variable。

遗憾的是,这是不允许的,所以我想知道为什么不这样做!? 另外,我想知道是否有人知道实现相同目标的 Pythonic 方法?

这是我尝试过的一个例子:

# example:

class Example(Object)

    def __init__(self):
        self.variable = []

    def fill_variable(self):
        self.variable = [random.randint(1,10)] * 10

    def use_variable(self, random_numbers = self.variable)
        print(random)

test.Example()
test.fill_variable()
test.use_variable()

# or
test.use_variable(random_numbers=[1,2,3,4,5,6,7,8,9,10])

我的期望是 test.use_variable() 会打印 10 随机数 那test.use_variable(random_numbers=[1,2,3,4,5,6,7,8,9,10])print(1,2,3,4,5,6,7,8,9,10)

感谢您的帮助和解释!

【问题讨论】:

    标签: python class self


    【解决方案1】:

    不幸的是,这是不可能的,相反,您可以使用 if 语句检查它是否是相同的值 (None),如果是,请将其分配给 self.variable

    def use_variable(self, random_numbers = None):
        if random_numbers == None:
            random_numbers = self.variable
        print(random_numbers)
    

    【讨论】:

    • 或者你可以在你的__init__里面做:self.use_variable = lambda x=self.variable:print(x),这样你就可以把它作为一个可选参数
    【解决方案2】:

    类级别的代码行,包括方法的def 行,在导入时执行一次。此时没有可能是self 的类的实例,甚至该类还没有完成。

    另一点是参数名称self 仅存在于方法内部

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2012-02-17
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 2014-07-27
      • 2017-11-12
      相关资源
      最近更新 更多