Python类内值相乘遇问题:调用方法返回绑定方法而非结果
嘿,我来帮你搞定这个问题!作为刚接触OOP的新手,这种小坑太常见啦~
问题出在哪?
你看到的那个奇怪的bound method...输出,是因为你调用类方法的时候没加括号!
看你代码最后一行:
print (apple.price)
这里的apple.price只是在引用price这个方法本身,并没有真正执行它。Python就会告诉你“这是一个绑定到apple实例上的方法对象”,而不是输出计算结果。
另外还有个小问题:你的price方法现在是直接打印计算值,没有返回结果。就算你加了括号,print(apple.price())也会先打出24,再打出None(因为方法没写return),这也不是你想要的效果。
修正后的代码
class Bread: # Python里类名习惯用大驼峰命名哦,更规范 def __init__(self, grain, cost, number): self.grain = grain self.cost = int(cost) self.number = int(number) def price(self): p = self.cost * self.number return p # 改成返回结果,而不是直接打印 # 创建实例时不用手动转int,__init__里已经处理啦 apple = Bread("wholemeal", 2, 12) print(apple.grain, apple.cost, apple.number) print(apple.price()) # 重点!调用方法必须加括号!
为啥这样改就对了?
- 方法调用要加括号:类的实例方法必须用
实例.方法名()的形式调用,这样才会执行方法里的逻辑,拿到你要的计算结果。 - 让方法返回结果:把
print(p)换成return p,这样你可以灵活地使用这个计算值(比如打印、赋值给变量),而不是让方法直接输出,代码复用性更高。 - 小规范优化:类名用大驼峰是Python的PEP8规范,看着更清晰;创建实例时传入的数字不用手动转
int,因为构造方法里已经帮你做了类型转换。
现在运行这段代码,就能得到你预期的24啦!
内容的提问来源于stack exchange,提问作者arung
相关产品推荐
相关产品推荐

