Публичная строка blaBla { get; задавать; } в питоне

Рассмотрим следующий пример, чтобы лучше понять мой вопрос:

public class ClassName 
{
    public ClassName { }

    public string Val { get; set; }

    ...
}

ClassName cn = new ClassName();

cn.Val = "Hi Stackru!!";

Что будет эквивалентом этого кода в Python?

3 ответа

Решение

Вы можете легко добавить членов к любому объекту Python, как показано в других ответах. Для более сложных методов get/set, как в C#, смотрите встроенное свойство:

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

   def _get_x(self):
      return self._x

   def _set_x(self, x):
      self._x = x

   def _del_x(self):
      del self._x

   x = property(_get_x, _set_x, _del_x, "the x property")

В Python нет геттеров и сеттеров в этом смысле. Следующий код эквивалентен приведенному выше коду:

class ClassName:
    pass

cn = ClassName()

cn.val = "Hi Stackru!!"

Обратите внимание, что в python нет упоминаний о методах получения / установки; вам даже не нужно объявлять val пока вы не установите его. Для создания пользовательских методов получения / установки вы можете сделать, например, это:

class ClassName:
    _val = "" # members preceded with an underscore are considered private, although this isn't enforced by the interpreter

    def set_val(self, new_val):
        self._val = new_val

    def get_val(self):
        return self._val
class a:
 pass    //you need not to declare val
x=a();
x.val="hi all";
Другие вопросы по тегам