__init__方法中的属性设置器?

时间:2017-07-11 02:36:24

标签: python properties

我有这种假设情况,我需要检查是否正在创建价格低于100的Phone实例,如果是,那么我必须警告用户价格不能低于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)

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

1 个答案:

答案 0 :(得分:2)

你实际上并没有调用属性setter。你是直接设置“私人”变量。

如果您想警告用户,您需要执行以下操作:

def __init__(self,v):
    self.cost = v

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