Discuss / Python / 有一个疑问

有一个疑问

Topic source

cgspt

#1 Created at ... [Delete] [Delete and Lock User]

self._height为什么不能去掉下划线,去掉之后显示RecursionError: maximum recursion depth exceeded

不太理解,而且前面加完下划线到最后self.width*self.height不加下划线也是可以运行成功的,这是为什么呢

以_开头表示实例变量而已,以__开头为私有变量

脱离语言

#3 Created at ... [Delete] [Delete and Lock User]

self.width*self.height

这样是通过属性方法计算的,而不是直接拿的属性计算的

函数名和变量名重复了

为什么要加_,因为你函数名和变量名重复了,_加这个代表一个变量。 为什么最后加不加_都可以,加_是代表直接调用变量计算,不加_是通过函数值取得变量值计算,相当于get(value)方法

Sergio75

#6 Created at ... [Delete] [Delete and Lock User]

我的理解是,如果你去掉下划线,在调用s.width的时候访问的就是width()这个写起来是方法但按属性用的方法,然后这个方法返回的又是width,然后由于这个width已经是一个方法名了,它返回的就是它本身,就形成一个递归函数,然而这个递归没有退出的条件,就造成了“无限递归”的错误。后面在调用的时候访问的width并不是属性,而是width()这个方法,这个方法不接受外部参数,直接返回s的属性值。

greatzues

#7 Created at ... [Delete] [Delete and Lock User]

@Sergio75 支持一个


  • 1

Reply