Python类的另类构造方法中为什么需要包含return语句?
问题解答
核心原因
from_string 作为类方法,需要把内部生成的类实例返回给调用方,否则外部无法拿到你创建的 Student 对象。
你的认知偏差点
你混淆了实例化表达式的返回特性和函数/方法的返回规则:
- 你写
Student("Cool", "Person")时,这个实例化表达式本身的求值结果就是新生成的Student实例,所以你可以直接把这个表达式的结果赋值给Student_1。 - 但你在
from_string方法内部写cls(first, last)时,这个实例化操作确实会生成新实例,也会调用__init__完成初始化,可这个新实例只存在于方法的内部作用域,如果没有return语句把它作为方法的返回值抛出,from_string方法会默认返回None,外部调用Student.from_string(Student_2)时拿到的就是None,根本没法得到你想要的实例对象。
验证示例
你可以把代码里的 return 去掉运行试试,结果会符合以下预期:
# 去掉return的错误版本 class Student: def __init__(self, first, last): self.first = first self.last = last @classmethod def from_string(cls, emp_str): first, last = emp_str.split("-") cls(first, last) # 无return语句 Student_2 = Student.from_string("Another-One") print(Student_2) # 输出None,尝试访问Student_2.first会直接抛出属性错误
内容的提问来源于stack exchange,提问作者Lambda
相关产品推荐
相关产品推荐

