【问题标题】:Initialize class properties without creating a constructor python在不创建构造函数python的情况下初始化类属性
【发布时间】:2022-01-12 11:35:27
【问题描述】:

我有这个代码:

class MyClass:
    a = None
    b = None

现在我的代码中有这部分:

my_class_instance = MyClass(a=3, b=5)

我收到此错误:

TypeError: MyClass() takes no arguments

有没有办法在不创建构造函数的情况下使用 ab 的值初始化 MyClass

【问题讨论】:

标签: python python-3.x


【解决方案1】:

一种可能性是数据类:

from dataclasses import dataclass

@dataclass
class MyClass:
    a: int
    b: int

mc = MyClass(a=3, b=5)

【讨论】:

  • 谢谢。我必须声明属性类型吗?如果我希望它是通用的怎么办?
  • stackoverflow.com/questions/49931096/… 回答了这个问题。
  • @Kenny 理论上,您可以将注释包装在字符串中以便转发声明它,因此例如a : ‘I really have no idea what I’m doing!’ 和Python 会喜欢这样就可以了。
  • 请注意,用普通引号 ' 替换角引号是必要的,因为我在手机上打字。
  • 尽管平心而论,如果您事先不知道变量将具有什么类型,您也可以将字段注释为typing.Any。然而,在实践中,通常您可以将其缩小到几种可能的类型,因此在这种情况下,您可以改用 typing.Union。例如,a: 'int | str | bool' 如果您知道字段 a 可以是这些类型中的任何一种,那么 IDE 也可以为您提供相应的类型提示。在 Python 3.10 中,您可以将其从字符串中解包并显式声明,因为内置类型支持管道 | 运算符。
猜你喜欢
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2012-05-15
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多