cj17 发表于 2019-7-10 17:43:26

求教第042讲课后作业测试题2

(代码1)
class Foo:
      def foo(self):
                self.foo = "I love FishC.com!"
                return self.foo

>>> foo = Foo()
>>> foo.foo()
'I love FishC.com!'

(代码2)
class Foo:
      def __init__(self):
                self.foo = "I love FishC.com!"
      def foo(self):
                return self.foo

>>> foo = Foo()
>>> foo.foo()
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
    foo.foo()
TypeError: 'str' object is not callable


题目中举例的两段代码都是类的属性名和方法名相同的情况,为什么代码1可以运行?
谢谢各位大神赐教!!!

新手·ing 发表于 2019-7-10 17:49:13

第二个代码,Python觉得你想访问foo属性,然后发现你在这个属性值后面加了个括号,就报错了。

冬雪雪冬 发表于 2019-7-10 17:57:55

可以这样理解。
程序1,先调用方法名,再调用属性名,这样foo.foo()时foo还没有被属性名覆盖
程序2,__init__先将foo变成属性名,再调用foo()时就出错了。
页: [1]
查看完整版本: 求教第042讲课后作业测试题2