Powiel możliwe:
Private functions/Variables enforcement in pythonPython zestaw statyczna właściwość klasa/dostać
można stworzyć równoważnym do następnej klasy z dwóch właściwości statycznych, jeden tylko do odczytu i drugiej przeczytane -pisz w języku Python?
class Foo
{
private static string _rdy = "RO";
public static string rd
{
get { return _rd; }
}
private static string _rw = "RW";
public static string rw
{
get { return _rw ; }
set { _rw = value; }
}
}
wiem read-only class properties są możliwe w Pythonie, ale jak ja nie widziałem żadnych przykładów właściwości klasy odczytu w Pythonie. Czy to możliwe? Zasadniczo chcę:
class classproperty(object):
def __init__(self, getter
#, setter
):
self.getter = getter
# self.setter = setter
def __get__(self, instance, owner):
return self.getter(owner)
# Could there be a __set__ here?
#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#def __set__(self, instance, owner, value):
# self.setter(owner, value)
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
class Foo(object):
_ro = "RO"
_rw = "RW"
@classproperty
def ro(cls):
return cls._ro
# How would you this?
#vvvvvvvvvvvvvvvvvvvv
#@classproperty.setter
#^^^^^^^^^^^^^^^^^^^^
#def rw(cls, value):
# cls._rw, value
# This is what I need
>>> Foo.ro
RO
>>> Foo.ro = 'X' # Hypothetical Exception
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class 'Foo' attribute 'ro' is not writable!
>>> Foo.rw
RW
>>> Foo.rw = 'NEW'
>>> Foo.rw
NEW
To świetnie. To najprostsza odpowiedź, jaką widziałem. – Amal
Kiedy zdefiniowano __metaclasses__defined, w jaki sposób można dodać ciągi dokumentacji do tych właściwości klasy? – Amal
Istnieją dwa sposoby używania 'property()'. Pokazałem i jako dekorator. Formularz dekoratora zachowuje ciągi dokumentów. Sposób, w jaki pokazałem, że doktryna jest czwartym argumentem, podczas gdy trzeci argument jest metodą usuwania dla propery. Ponownie, zapoznaj się z dołączonym linkiem do dokumentacji Pythona. –