Question about properties.

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • king kikapu

    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!

  • dijkstra.arjen@gmail.com

    #2
    Re: Question about properties.

    On Aug 10, 12:21 pm, king kikapu <aboudou...@pan afonet.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


    Comment

    • Marc 'BlackJack' Rintsch

      #3
      Re: Question about properties.

      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

      Comment

      • king kikapu

        #4
        Re: Question about properties.

        On Aug 10, 1:33 pm, Marc 'BlackJack' Rintsch <bj_...@gmx.net wrote:
        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...

        Comment

        • king kikapu

          #5
          Re: Question about properties.

          Maybe is just a writers' "play" and nothing else.

          Comment

          • Steve Holden

            #6
            Re: Question about properties.

            king kikapu wrote:
            On Aug 10, 1:33 pm, Marc 'BlackJack' Rintsch <bj_...@gmx.net wrote:
            >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 -------------

            Comment

            • Antti Rasinen

              #7
              Re: 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 ??
              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 <*ars@iki.fi ]

              Comment

              • Dustan

                #8
                Re: Question about properties.

                On Aug 10, 5:31 am, dijkstra.ar...@ gmail.com wrote:
                On Aug 10, 12:21 pm, king kikapu <aboudou...@pan afonet.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


                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.

                Comment

                • Gerardo Herzig

                  #9
                  Re: Question about properties.

                  king kikapu wrote:
                  >On Aug 10, 1:33 pm, Marc 'BlackJack' Rintsch <bj_...@gmx.net wrote:
                  >
                  >
                  >>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

                  Comment

                  Working...