Как сделать поле класса [список] доступным только для чтения в Python? - PullRequest
3 голосов
/ 18 июля 2010

у меня есть self.some_field = [] в моем классе
Я спрашиваю, есть ли способ сделать этот список только для чтения, как свойство?

Ответы [ 2 ]

7 голосов
/ 18 июля 2010

Вам нужно сделать его действительно свойством ...: например, в __init__

self._some_field = []

, а затем в теле класса:

@property
def some_field(self):
    return self._some_field

Примечание.что это не делает сам список неизменным: то, что потерпит неудачу, это назначение , как, скажем,

self.some_field = 'bah'

не вызовмутатора, как, скажем,

self.some_field.append('blah')

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

1 голос
/ 18 июля 2010

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

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