Использование свойств в Python, как в примере C # - PullRequest
7 голосов
/ 24 июля 2010

В настоящее время я некоторое время работаю с Python и дошел до того, что задался вопросом, должен ли я использовать «Свойства» в Python так часто, как в C #.В C # я в основном создавал свойства для большинства моих классов.

Кажется, что свойства не так популярны в Python, я не прав?Как использовать свойства в Python?

regards,

Ответы [ 3 ]

10 голосов
/ 24 июля 2010

Свойства часто не требуются, если все, что вы делаете, это задаете и запрашиваете переменные-члены.Поскольку 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
7 голосов
/ 24 июля 2010

Я бы порекомендовал прочитать это, даже если оно адресовано программистам Java: Python - это не Java

2 голосов
/ 24 июля 2010

Если вы сделаете атрибут общедоступным в C #, то позже вам потребуется изменить его на свойство, вам также необходимо перекомпилировать весь код, который использует исходный класс. Это плохо, поэтому делайте любые открытые атрибуты в свойства с первого дня «на всякий случай».

Если у вас есть атрибут, который используется из другого кода, то позже вам нужно изменить его на свойство, тогда вы просто измените его, и больше ничего не должно произойти. Поэтому используйте обычные атрибуты до тех пор, пока не обнаружите, что вам нужно что-то более сложное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...