You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类构造函数中属性指定方式的差异咨询

Python类初始化方法的差异解析

先看你列出的6段代码,每段的行为差异很明确,逐个拆解:

1. 必须传参的初始化

class car:
    def __init__(self, weight):
        self.weight = weight
  • 创建实例时必须传入weight参数,比如car(100),否则会报错;实例的weight属性完全等于你传入的值。

2. 传参但完全忽略的初始化

class car:
    def __init__(self, weight):
        self.weight = 0
  • 同样必须传weight参数,但不管你传什么(比如car(200)),实例的weight永远是0——这个参数纯粹是摆设,没有任何实际作用。

3. 带默认值的灵活初始化

class car:
    def __init__(self, weight=0):
        self.weight = weight
  • 创建实例时可选传参:不传的话(car()),weight默认是0;传参的话(car(150)),实例的weight就是你传入的值。这是最实用的一种写法,兼顾默认值和自定义需求。

4. 带默认值但强制固定值的初始化

class car:
    def __init__(self, weight=0):
        self.weight = 0
  • 虽然允许不传参数,但不管你传不传、传什么,实例的weight永远是0——默认参数和传入参数都被忽略了,属于冗余写法。

5. 带默认值但强制固定其他值的初始化

class car:
    def __init__(self, weight=0):
        self.weight = 1
  • 和上面类似,不管你传什么参数,实例的weight永远是1,参数和默认值都没用。

6. 无参数的固定值初始化

class car:
    def __init__(self):
        self.weight = 0
  • 创建实例时不能传任何参数(比如car(50)会报错),所有实例的weight都固定为0,完全没有自定义空间。

你重点问的两种写法的核心区别

def __init__(self, weight=0): self.weight = weight 和 def __init__(self): self.weight = 0 这两种,本质是灵活性的差异:

  • 前者是「默认值+可自定义」:既给了实例一个默认的weight=0,又允许用户在创建实例时传入其他值(比如car(200)让这个车的重量是200)。
  • 后者是「完全固定值」:所有实例的weight只能是0,用户没有任何修改的余地。

如果设置不同的值会怎样?

比如把第一种写法的默认值改成weight=100:

class car:
    def __init__(self, weight=100):
        self.weight = weight
  • 不传参数时,实例weight是100;传car(150),weight就是150,依然保留自定义能力。

如果把第二种写法的固定值改成self.weight=100:

class car:
    def __init__(self):
        self.weight = 100
  • 所有实例的weight都是100,你没法通过创建实例时传参来修改这个值。

内容的提问来源于stack exchange,提问作者simply lemon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:35:06