【问题标题】:Compare the different ways to pass argument in Python constructor比较在 Python 构造函数中传递参数的不同方式
【发布时间】:2022-01-18 03:37:59
【问题描述】:

根据我的研究,对于在 Python 类中创建新对象,有几种方法可以传入 args。

name: str = None

name: Optional[str] = None

**kwargs

感觉效果差不多吧?即使我这样做name: str = 'John',我仍然可以跳过传递这个参数,但对象仍然会将John 作为年龄默认值。

所以我很好奇他们的区别是什么?也许他们在其他场景中有很大的差异

【问题讨论】:

  • 注意可选的新样式语法是str | None(也短一点)
  • 是的,但是Optional 与第一种方式有何不同?
  • 第一个语法,课外让我的 IDE 抱怨。尽管如此,仍然运行相同。

标签: python constructor arguments


【解决方案1】:

所以澄清一下。您发布的内容不是“传入”args,而是将默认值设置为参数。

忽略 **kwargs,因为它与其他两个完全分开。 真的没有区别。

如果你打开 PyCharm 并执行这两个功能...

def test(name: str = None):
    pass

def test2(name: Optional[str] = None):
    pass

如果你将鼠标悬停在参数上,pycharm 会显示两者都等于“str | None”。

类型提示Optional 确实与 mypy 之类的类型检查工具有一些用处,因为它可以更清楚地告诉检查器您想要做什么,但除了对 python 之外,它们是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多