Python面向对象编程:为何需将属性参数设为None才能运行?
为什么Shape类的__init__需要给w和h设默认值None?
问题的核心原因是你在__add__方法里写了这行代码:
shp = Shape()
这里是不带任何参数创建Shape类的实例。如果你的__init__方法定义成def __init__(self, w, h),Python会强制要求创建实例时必须传入w和h两个参数,否则会直接抛出TypeError: __init__() missing 2 required positional arguments: 'w' and 'h'的错误。
给w和h设置默认值None,本质是让__init__支持无参数调用,这样你就能先创建一个空的Shape对象,之后再手动给它的width和height属性赋值,就像你在__add__里做的那样。
当然,你也可以不用给__init__加默认值,只要修改__add__的写法就行:
def __add__(self, other): shp = Shape(self.width + other.width, self.height + other.height) return shp
这样直接把计算好的宽高传给Shape的构造方法,就不需要无参数创建实例了,两种写法都能实现需求,看你更习惯哪种。
内容的提问来源于stack exchange,提问作者hgarciasion
相关产品推荐
相关产品推荐

