Skip to main content
 首页 » 编程设计

python之如何使用属性()

2025年05月04日10shihaiming

我在如何实现属性来保护属性方面遇到了麻烦。

class Point: 
    def __init__(self, x, y): 
        self.x = x 
        self.y = y 
 
    def set_x(self, x): 
        if '_x' in dir(self): 
            raise NotImplementedError("Cannot change x coordinate") 
        else: 
            self._x = x 
 
    def get_x(self): 
        return self._x 
 
    #I beleive my mistake is here. I'm not sure if I'm implementing this correctly 
    x = property(get_x, set_x, None, None) 

所以我想阻止任何用户更改 x 坐标。我的问题是,如何让 python 将用户重定向到 set_x() 和 get_x() 方法?我试过在终端中运行这段代码,每当我应用以下代码时,点都会改变。

p = point(3, 4) 
p.x = 5 #x is now 5 

请您参考如下方法:

你只需要这么多:

class Point: 
    def __init__(self, x, y): 
        self._x = x 
        self.y = y 
    def get_x(self): 
        return self._x 
    x = property(get_x) 

您可以在init 中设置隐藏字段self._x,然后您根本不需要x 的setter。并让 get_x 返回 self._x 而不是 self.x 所以它不会尝试调用自己。

您可以使用 @property 装饰器来更简洁地完成此操作。

class Point: 
    def __init__(self, x, y): 
        self._x = x 
        self.y = y 
    @property 
    def x(self): 
        return self._x