这么写为什么没有报错???
没有报错class Foo:
def foo(self):
self.foo = "I love FishC.com!"
return self.foo
>>> foo = Foo()
>>> foo.foo()
'I love FishC.com!'
报错了
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
属性名和方法名字相同时,属性会把方法覆盖,为什么第一中没有报错呢?
主要因为 __init__ 在实例化时候自动调用,然后按照代码运行顺序来看就能理解为什么:
class Foo:
def foo(self):
self.foo = "I love FishC.com!"
return self.foo
这是第一个代码,当你调用 foo.foo() 时候 是先调用 def foo(self) 这个函数 然后执行函数内的代码 self.foo = "I love FishC.com!"
这个时候才把 foo() 函数给覆盖了,所以这个调用不会报错,是先调用后赋值
然后你在看看这个:
class Foo:
def __init__(self):
self.foo = "I love FishC.com!"
def foo(self):
return self.foo
__init__ 是在你实例化对象时候自动调用,所以你一 foo = Foo() 就将属性 self.foo = "I love FishC.com!" 覆盖了 def foo(self): 方法
导致你调用 foo.foo() 时候 foo已经是一个属性了而不是一个方法,所以会报错
页:
[1]