为何未显式指定赋值规则,Python仍能识别radius属性?
问题:Python中静态方法返回值如何关联到类的属性?
我近期开始学习Python,编写了如下代码:
import math class Circle: def __init__(self, radius): self.radius = radius def area(self): return math.pi * self.radius ** 2 @staticmethod def convert_area_in_radius(area): return math.sqrt(area/math.pi) c2 = Circle(Circle.convert_area_in_radius(80)) print(c2.radius)
运行后控制台返回约5.04,我理解调用convert_area_in_radius方法的作用,但疑惑Python如何知晓该方法的返回值被赋值给__init__方法的radius属性?我认为没有显式关联该属性,预期得到相同结果,但不该通过print(c2.radius)获取。
回答
这个过程是明确的参数传递+属性赋值逻辑,并非Python“自动知晓”关联,拆解步骤就能看明白:
- 先执行
Circle.convert_area_in_radius(80):这个静态方法接收面积80,计算出对应的半径值(约5.04)并返回。 - 把该返回值作为参数传给
Circle类的构造函数:创建Circle实例时,5.04被直接传给了__init__方法的radius参数。 __init__方法里的self.radius = radius已经显式完成赋值:这里的self就是正在创建的c2实例,所以c2.radius自然等于传入的数值。
你觉得“没有显式关联”是忽略了构造函数的参数传递和__init__里的赋值代码,实际上这两步已经把静态方法的返回值和实例的radius属性绑定起来了。
内容的提问来源于stack exchange,提问作者JerryWest
相关产品推荐
相关产品推荐

