python - 使用默认值初始化方法的参数

标签 python

如果没有将显式值传递给方法,我想用一些默认值初始化方法的参数 - 像这样:

class Example
   def __init__(self, data = self.default_data()):
      self.data = data

   def default_data():
      # ....
      return something

我得到了错误:

NameError: name 'self' is not defined

我该如何解决这个问题?

最佳答案

这里的常见习惯用法是将默认值设置为某个标记值(None 是典型的,尽管 some have suggested Ellipsis 用于此目的),然后您可以检查。

class Example(object): #inherit from object.  It's just a good idea.
   def __init__(self, data = None):
      self.data = self.default_data() if data is None else data

   def default_data(self):  #probably need `self` here, unless this is a @staticmethod ...
      # ....
      return something

您可能还会看到用于标记的 object() 实例。

SENTINEL = object()
class Example(object):
   def __init__(self, data = SENTINEL):
      self.data = self.default_data() if data is SENTINEL else data

后一个版本的好处是您可以将 None 传递给您的函数,但也有一些缺点(请参阅下面@larsmans 的评论)。如果您不预见需要将 None 作为有意义的参数传递给您的方法,我会提倡使用它。

关于python - 使用默认值初始化方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075044/

相关文章:

python - 基于多个条件创建 Pandas Dataframe 列

python - 在 NumPy 数组中获取唯一行时保留顺序

python - Python 中字符串的受限排列

python - 计算 Pandas 数据框中多列中具有相同字符串值的总行数

python - 从需要用户输入的 python 运行 linux 命令

python统计分析

python - 如何并行运行函数?

python - 如何将 QPixmap 的图像转换为字节

python - 如何使用 matplotlib 绘制没有颜色的网格混淆矩阵?

python odoo 10错误