【问题标题】:Initializing Instance Attributes with a For loop使用 For 循环初始化实例属性
【发布时间】:2021-08-04 13:16:59
【问题描述】:

所以我正在尝试编写一个带有四个参数的 python 类,检查是否有任何参数是None。如果没有,则 self.parameter = 'None' 否则 self.parameter = parameter

我在下面写代码sn-p。

class meta():
    def __init__(self, color, size, symbol, message):
        for a in [color, size, symbol, message]:
            if a == 'None':
                self.a = 'None'
            else:
                self.a = a

现在我知道这里的错误,self.a 被分配为实例变量。但我希望实例变量循环遍历 self.color, self.size, self.symbol, self.message 的值。

我怎样才能实现所需的功能?

【问题讨论】:

  • 不清楚 if 条件的目标是什么?
  • 我基本上正在开发一个 Flask 应用程序,这个类从 URL 中获取参数。这些参数来自 HTML 表单。因此,在没有选择表单中的属性并且在 URL 中返回为“无”的情况下。所以这就是为什么我必须保留“无”的检查。

标签: python oop python-class


【解决方案1】:

if 不是必需的,因为 a 是 'None'

所以函数简化为

class meta():
    def __init__(self, color, size, symbol, message):
        for a in [color, size, symbol, message]:
            self.a = a

接下来,您必须明确提供属性的名称:

class meta():
    def __init__(self, color, size, symbol, message):
        for name, value in [('color', color), ('size', size), ('symbol', symbol), ('message', message)]:
            setattr(self, name, value)

所以你不能用 for 循环来简化你的代码,它只会比简单地分配属性更复杂:

class meta():
    def __init__(self, color, size, symbol, message):
        self.color = color
        self.size = size
        self.symbol = symbol
        self.message = message

【讨论】:

  • 如果没有argskwargs,你怎么看?
  • 好的,明白了,感谢您的解释。 setattr() 完成了这项工作。我想我可能会保留 if 语句,因为我从 URL 获取参数,所以 None 是一个字符串。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多