472,093 Members | 2,517 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,093 software developers and data experts.

Question about properties.

Hi,

i read in a book the following code snippet that is dealing with
properties:

class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x

def get_x(self):
return ~self.__x

x = property(get_x)
Can anyone please help me understand what the symbol "~" does here ??

Thanks for any help!

Aug 10 '07 #1
8 934
On Aug 10, 12:21 pm, king kikapu <aboudou...@panafonet.grwrote:
Hi,

i read in a book the following code snippet that is dealing with
properties:

class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x

def get_x(self):
return ~self.__x

x = property(get_x)

Can anyone please help me understand what the symbol "~" does here ??

Thanks for any help!
>>help(2)
.....
| __invert__(...)
| x.__invert__() <==~x

hth.
Duikboot
Aug 10 '07 #2
On Fri, 10 Aug 2007 03:21:29 -0700, king kikapu wrote:
Hi,

i read in a book the following code snippet that is dealing with
properties:

class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x

def get_x(self):
return ~self.__x

x = property(get_x)
Can anyone please help me understand what the symbol "~" does here ??
This has nothing to do with properties. For integer objects ``~`` is the
bitwise negation or invertion operator.

Ciao,
Marc 'BlackJack' Rintsch
Aug 10 '07 #3
On Aug 10, 1:33 pm, Marc 'BlackJack' Rintsch <bj_...@gmx.netwrote:
On Fri, 10 Aug 2007 03:21:29 -0700, king kikapu wrote:
Hi,
i read in a book the following code snippet that is dealing with
properties:
class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x
def get_x(self):
return ~self.__x
x = property(get_x)
Can anyone please help me understand what the symbol "~" does here ??

This has nothing to do with properties. For integer objects ``~`` is the
bitwise negation or invertion operator.

Ciao,
Marc 'BlackJack' Rintsch
Xmmm...ok then but what is actually doing there ?? I removed it and
things seems to work the same way...

Aug 10 '07 #4
Maybe is just a writers' "play" and nothing else.

Aug 10 '07 #5
king kikapu wrote:
On Aug 10, 1:33 pm, Marc 'BlackJack' Rintsch <bj_...@gmx.netwrote:
>On Fri, 10 Aug 2007 03:21:29 -0700, king kikapu wrote:
>>Hi,
i read in a book the following code snippet that is dealing with
properties:
class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x
def get_x(self):
return ~self.__x
x = property(get_x)
Can anyone please help me understand what the symbol "~" does here ??
This has nothing to do with properties. For integer objects ``~`` is the
bitwise negation or invertion operator.

Ciao,
Marc 'BlackJack' Rintsch

Xmmm...ok then but what is actually doing there ?? I removed it and
things seems to work the same way...
Observe the name of the class. I believe the integer value is inverted
merely as a demonstration that the value can be "obscured" somehow - in
a more complex example the author might have insisted in string values,
the encrypted them. It's not essential to the example, it merely shows
that the value retrieved from the property can be computed from
underlying attributes.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------

Aug 10 '07 #6
Hi,

i read in a book the following code snippet that is dealing with
properties:

class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x

def get_x(self):
return ~self.__x

x = property(get_x)
Can anyone please help me understand what the symbol "~" does here ??
My guess is that the example tries to show that it does not matter how the
property computes the value. You can -- if you want -- to store integers
as their bit-inverted versions (the ~ operator) and then do the conversion
when getting the property value.

Assume you initialized the object with ProtectAndHideX(4). Outside the
object you don't have access to the original __x. And! Even if you changed
the name of the variable name to y, you'd have hidden_x.y == -5 instead of
4.

The example is very contrived. There might be some security related cases
where you need to hide what you store in memory, though. (Hopefully they
do more than just invert the bits! :)

NB: I don't know what the original author was thinking here -- my
telepathy isn't what it used to be.

--
[ Antti Rasinen <*ar*@iki.fi ]

Aug 10 '07 #7
On Aug 10, 5:31 am, dijkstra.ar...@gmail.com wrote:
On Aug 10, 12:21 pm, king kikapu <aboudou...@panafonet.grwrote:
Hi,
i read in a book the following code snippet that is dealing with
properties:
class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x
def get_x(self):
return ~self.__x
x = property(get_x)
Can anyone please help me understand what the symbol "~" does here ??
Thanks for any help!
>help(2)

....
| __invert__(...)
| x.__invert__() <==~x

hth.
Duikboot
http://docs.python.org/ref/unary.html

The unary ~ (invert) operator yields the bit-wise inversion of its
plain or long integer argument. The bit-wise inversion of x is defined
as -(x+1). It only applies to integral numbers.

Aug 10 '07 #8
king kikapu wrote:
>On Aug 10, 1:33 pm, Marc 'BlackJack' Rintsch <bj_...@gmx.netwrote:

>>On Fri, 10 Aug 2007 03:21:29 -0700, king kikapu wrote:

>>>Hi,
i read in a book the following code snippet that is dealing with
properties:
class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), '"x" must be an integer!"'
self.__x = ~x
def get_x(self):
return ~self.__x
x = property(get_x)
Can anyone please help me understand what the symbol "~" does here ??

This has nothing to do with properties. For integer objects ``~`` is the
bitwise negation or invertion operator.

Ciao,
Marc 'BlackJack' Rintsch


Xmmm...ok then but what is actually doing there ?? I removed it and
things seems to work the same way...
I guess it is the `Hide' part of the Protectand*Hide* class.
Gerardo
Aug 10 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by lawrence | last post: by
21 posts views Thread by Jon Slaughter | last post: by
6 posts views Thread by amethyste | last post: by
15 posts views Thread by designconcepts | last post: by
12 posts views Thread by einar | last post: by
6 posts views Thread by RSH | last post: by
11 posts views Thread by manstey | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.