Python中不定义constructor如何初始化类属性并实现带参实例化
问题解答
可以实现,有多种无需手动编写__init__构造函数的方案可选:
方案1:使用Python标准库dataclasses装饰器(推荐,Python 3.7+支持)
只需要给原有类加@dataclass装饰器,装饰器会自动生成符合参数要求的构造函数,无需手动编写初始化逻辑:
from dataclasses import dataclass @dataclass class MyClass: a = None b = None # 可正常实例化传参 my_class_instance = MyClass(a=3, b=5)
方案2:实例化后手动赋值(无需修改原有类定义)
如果完全不想调整原有MyClass的代码,可以先创建无参实例,再给属性单独赋值:
# 原有类定义不变 class MyClass: a = None b = None my_class_instance = MyClass() my_class_instance.a = 3 my_class_instance.b = 5
方案3:批量赋值(适合属性较多的场景)
如果需要赋值的属性数量多,可以用setattr批量传入属性键值对,避免逐行写赋值语句:
my_class_instance = MyClass() init_params = {"a": 3, "b": 5} for attr_name, attr_value in init_params.items(): setattr(my_class_instance, attr_name, attr_value)
报错原因说明
你最初的代码报错是因为Python的类默认继承的基础构造函数不接收任何参数,只有当类定义了__init__方法、或是通过装饰器等方式自动生成了带参构造函数时,才可以在实例化时传入参数。
内容的提问来源于stack exchange,提问作者Kenny Smith
相关产品推荐
相关产品推荐

