Discuss / Python / 疑问,为啥只能设置为私有变量

疑问,为啥只能设置为私有变量

Topic source

class Screen(object):

    @property

    def width(self):

        return self.__width

    @width.setter

    def width(self, width):

        self.__width = width

    @property

    def height(self):

        return self.__height

    @height.setter

    def height(self, height):

        self.__height = height

    @property

    def resolution(self):

        return self.__width * self.__height

# 测试:
s = Screen()
s.width = 1024
s.height = 768
print('resolution =', s.resolution)
if s.resolution == 786432:
    print('测试通过!')
else:
    print('测试失败!')

最大递归深度超过?

MsAprilFool

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

其实不是私有的问题,是因为变量和方法重名了

比如在width()方法里    变量名还用 width的话    self.width就会调用width()方法自身

所以不一定非要写成_width或者__width

换一个名字比如 new_width   也是可以的

我也是初学者,说错了见谅= =

路人空2000

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

这里你可以不设置私有变量,但是调用的方式要改一下,假如这里返回self.变量,就和你本身在外面调用它是一样,就会造成死循环,你创建一个实例,这个实例会有一个属性字典,你可以通过调用这个属性字典比如,self.__dict__[你输入的值] 这里就会返回你要的值了

路人空2000

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

昨天没注意弄错了一点self.__dict__[key]  ,然后别的也是这样删除,在属性字典里面删除,增加,也在属性字典里面就可以


  • 1

Reply