2012-03-06 4 views
4

Каков самый простой способ определения setter и getter в Python? Есть ли что-нибудь подобное в C#Каков самый простой способ определения setter и getter в Python

public int Prop {get; set;} 

Как это сделать? Так как написать оба метода setter и getter для одного свойства, как это, это слишком много работы.

class MyClass(): 
    def foo_get(self): 
     return self._foo 

    def foo_set(self, val): 
     self._foo = val 

    foo = property(foo_get, foo_set) 

Заранее благодарен!

+0

Think вы имеете в виду self._foo = значение на строка 6. –

+0

@ sr2222 Только что обновил его. Благодаря! – zsong

ответ

17

Если сеттер и геттер не делают ничего, кроме доступа к базовому реальному атрибуту, то самым простым способом их реализации является не писать сеттеры и геттеры вообще. Это стандартное поведение, и нет смысла писать функции, воссоздающие поведение, которое атрибут имеет в любом случае.

Вам не нужны геттеры и сеттеры, чтобы обеспечить инкапсуляцию в случае, когда ваша логика доступа изменится на нечто иное, чем стандартная механика доступа, так как введение свойства не нарушит ваш интерфейс.

Python Is Not Java. (а не C# либо, по этому вопросу.)

+0

реализовать их будет способствовать автоматическому завершению инструментов. – squid

1

property в Python builtin function см this link на их использование. Он работает без парнеров, поэтому вы можете начать с предпочтения Свена просто использовать атрибут и изменить его, чтобы использовать геттеры и сеттеры позже.

7

Обычно вы не пишете сеттеры/геттеры. Нет никакого смысла, поскольку python не мешает кому-либо напрямую обращаться к атрибутам. Однако, если вы нуждаетесь в логике, вы можете использовать propertys

class Foo(object): 
    def __init__(self, db): 
     self.db = db 

    @property 
    def x(self): 
     db.get('x') 

    @x.setter 
    def x(self, value): 
     db.set('x', value) 

    @x.deleter 
    def x(self): 
     db.delete('x') 

Вы можете использовать эти методы свойств так же, как вы бы основное значение атрибута:

foo = Foo(db) 
foo.x 
foo.x = 'bar' 
del foo.x 
Смежные вопросы