Thread View: pl.comp.lang.python
2 messages
2 total messages
Started by ak3031884
Fri, 27 Nov 2009 21:21
dyskryptory
Author: ak3031884
Date: Fri, 27 Nov 2009 21:21
Date: Fri, 27 Nov 2009 21:21
38 lines
2268 bytes
2268 bytes
Witam,
zabieram się za temat dyskryptorów po raz ......no dużo tego było ale
tym razem powiedziałem sobie że nie odpuszcze bo nie rozumiem całego
stanu rzeczy z dyskryptorami po co je wymyślili dojście do składowych
klasy w pythonnie możemy uzyskać w bardzo prosyt sposób prawda
clsss myClass():
def __init__(self, a, b):
self.a = a
self.b = b
return
my = Class()
my.a =1
my.b=2
czysyt ładny kod, dojście jest a jeżeli chcemy to zakapsułkować to
zawsz możemy zmienne ustawić na
self.__a będzie to zmienna praywatna której nie zmodyfikujemy
z dyskryptorami będzie to wyglądało tak
class myClass(object):
def __init__(self, self, a, b):
self.a = a
self.b = b
def __get__(self, obj, objtype):
return self.a
def __set__(self, obj, val):
self.a = a
2 klasa nie wiem czy dobrze napisana bo nie rozumiem tego ale to koło
tego ma wyglądać.
Tak czy inaczej więcej pisania, zagmatwane, moim skromnym zdaniem nie
bardzo czytelne,
wytłumaczcie mi co w tym takiego dobrego iż jest to wprowadzane do
każdego języka programowania.
Re: dyskryptory
Author: Rob Wolfe
Date: Sat, 28 Nov 2009 13:04
Date: Sat, 28 Nov 2009 13:04
77 lines
3356 bytes
3356 bytes
ak3031884 <ak3031884@gmail.com> writes:
> Witam,
> zabieram się za temat dyskryptorów po raz ......no dużo tego było ale
> tym razem powiedziałem sobie że nie odpuszcze bo nie rozumiem całego
> stanu rzeczy z dyskryptorami po co je wymyślili dojście do składowych
> klasy w pythonnie możemy uzyskać w bardzo prosyt sposób prawda
>
> clsss myClass():
> def __init__(self, a, b):
> self.a = a
> self.b = b
> return
>
> my = Class()
> my.a =1
> my.b=2
>
> czysyt ładny kod, dojście jest a jeżeli chcemy to zakapsułkować to
> zawsz możemy zmienne ustawić na
> self.__a będzie to zmienna praywatna której nie zmodyfikujemy
> z dyskryptorami będzie to wyglądało tak
>
> class myClass(object):
> def __init__(self, self, a, b):
> self.a = a
> self.b = b
>
> def __get__(self, obj, objtype):
> return self.a
>
> def __set__(self, obj, val):
> self.a = a
>
> 2 klasa nie wiem czy dobrze napisana bo nie rozumiem tego ale to koło
> tego ma wyglądać.
> Tak czy inaczej więcej pisania, zagmatwane, moim skromnym zdaniem nie
> bardzo czytelne,
> wytłumaczcie mi co w tym takiego dobrego iż jest to wprowadzane do
> każdego języka programowania.
Zapewne znana Ci jest funkcja "property":
http://docs.python.org/library/functions.html?highlight=property#property
Czy masz jakieś wątpliwości, że jest użyteczna (szczególnie
w kontekście wszechobecnych setterów i getterów)?
"Property" tworzy właśnie deskryptor, który wygląda tak:
class property(object):
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
if doc is None and fget is not None and hasattr(fget, "__doc__"):
doc = fget.__doc__
self.__get = fget
self.__set = fset
self.__del = fdel
self.__doc__ = doc
def __get__(self, inst, type=None):
if inst is None:
return self
if self.__get is None:
raise AttributeError, "unreadable attribute"
return self.__get(inst)
def __set__(self, inst, value):
if self.__set is None:
raise AttributeError, "can't set attribute"
return self.__set(inst, value)
def __delete__(self, inst):
if self.__del is None:
raise AttributeError, "can't delete attribute"
return self.__del(inst)
RW
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads