__init__ 方法中的属性设置器?

kar*_*n_r 4 python properties

我有这样一个假设的情况,我需要检查是否Phone正在创建价格低于 100 的实例,如果是,那么我必须警告用户价格不能低于 100。

我在此示例中使用以下内容:

class Phone(object):
    def __init__(self,v):
        self._cost = v

    @property
    def cost(self):
        return self._cost

    @cost.setter
    def cost(self,value):
        if value < 100:
            print("Cost cannot be less than 100")
        else:
             self._cost = value

s8 = Phone(98)
Run Code Online (Sandbox Code Playgroud)

但是这段代码并没有让用户知道不能以低于 100 的价格创建手机。如果我们在初始化对象时无法检查值,那么在 Python 中为属性提供 setter 函数有什么用呢?我在这里做错了什么吗?

Ale*_*agh 6

您实际上并没有调用属性设置器。您直接设置“私有”变量。

如果你想警告用户,你需要这样做:

def __init__(self,v):
    self.cost = v
Run Code Online (Sandbox Code Playgroud)

请记住,属性允许您抽象出内部实现细节(cost通过这种方式, 是 的公共接口_cost)。但是,如果您直接操作_cost自己,那么您的界面将不会在初始化期间警告用户。