Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can't I access the private variables of the superclass in Python?

I know that I should use the access methods. I see in the datetime module that the class datetime inherits from date.

class datetime(date):
    <some other code here....>
    self = date.__new__(cls, year, month, day)
    self._hour = hour
    self._minute = minute
    self._second = second
    self._microsecond = microsecond
    self._tzinfo = tzinfo
    return self

I also see that datetime is able to access the members of date, as in __repr__:

def __repr__(self):
    """Convert to formal string, for repr()."""
    L = [self._year, self._month, self._day, # These are never zero
         self._hour, self._minute, self._second, self._microsecond]

I tried to subclass datetime to add some information to it and then write a similar __repr__ function:

def __repr__(self):
    """Convert to formal string, for repr()."""
    L = [self._year, self._month, self._day, # These are never zero
         self._hour, self._minute, self._second, self._microsecond,
         self._latitude, self._longitude]

The debugger complained that self._year didn't exist. (self.year works, however.)

I know that I should be using the access function. I just want to understand why datetime is able to access the private variables of date but my subclass isn't able.

like image 654
Eyal Avatar asked Oct 08 '22 19:10

Eyal


1 Answers

if you look at the end of datetime.py, you'll see this:

try:
    from _datetime import *
except ImportError:
    pass

this imports among other things the C-version of the previously defined python classes, which will therefore be used, and those don't have the members you're trying to access.

like image 155
mata Avatar answered Oct 10 '22 08:10

mata