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
相关产品推荐
相关产品推荐

