Python Getters和Setters

时间:2015-11-22 10:26:00

标签: python class properties getter-setter

我应该如何在roll方法中访问类实例变量?

我应该使用self._value访问self._value还是使用self.value访问我的二传手?同问self._sides

import random


class MSDie:
    def __init__(self, sides):
        self._sides = sides
        self._value = 1

    @property
    def sides(self):
        return self._sides

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, number):
        self._value = number

    def roll(self):
        self._value = random.randrange(1, self.sides + 1)

所以基本上,我应该像这样创建roll方法:

def roll(self):
    self.value = random.randrange(1, self.sides + 1)

现在我知道如何正确地使用get_value / set_value的传统方式,但我正在尝试学习如何创建更多的pythonic类。

出于好奇,为什么self.value(random.randrange(1, self.value + 1)self.value(self, random.randrange(1, self.sides + 1)无法访问self._value变量并进行更改?

1 个答案:

答案 0 :(得分:4)

在当前的实现中,value-property没有用。如果你有一个setter,例如,附加检查,你必须决定,roll是否需要额外的检查。如果不确定,请使用self.value