在Python中像C#示例一样使用属性

10 投票
3 回答
3979 浏览
提问于 2025-04-16 01:46

我最近在用Python编程,到了一个阶段,我开始思考自己是否应该像在C#中那样频繁使用“属性”。在C#中,我大多数类都创建了属性。

看起来在Python中,属性并不是那么受欢迎,我是不是搞错了?在Python中该怎么使用属性呢?

问候,

3 个回答

2

如果你在C#中把一个属性设置为公开的,然后后来想把它改成一个属性(property),那么你需要重新编译所有使用这个类的代码。这就很麻烦,所以从一开始就把任何公开的属性设置成属性,省得将来麻烦。

如果你有一个属性被其他代码使用,后来想把它改成属性,你只需要改一下,其他的就不需要做了。所以在你发现需要更复杂的东西之前,可以先用普通的属性。

7

我建议你读一下这个,虽然它是针对Java程序员的:Python并不是Java

15

如果你只是设置和查询成员变量,通常不需要使用属性。因为在Python中,没有封装的概念,所有的成员变量都是公开的,所以通常不需要对访问进行封装。不过,使用属性是完全可以的,而且也很流行:

class C(object):
    def __init__(self):
        self._x = 0

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, value):
        if value <= 0:
            raise ValueError("Value must be positive")
        self._x = value

o = C()
print o.x
o.x = 5
print o.x
o.x = -2

撰写回答