5

我知道我应该使用访问方法。我在datetime模块中看到该类datetime继承自日期。

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

我还看到 datetime 能够访问 date 的成员,如__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]

我尝试子类化 datetime 以向其中添加一些信息,然后编写一个类似的__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,
         self._latitude, self._longitude]

调试器抱怨 self._year 不存在。(self.year但是有效。)

我知道我应该使用访问功能。我只是想了解为什么datetime能够访问私有变量date但我的子类不能。

4

2 回答 2

4

如果您查看结尾datetime.py,您会看到:

try:
    from _datetime import *
except ImportError:
    pass

这将导入先前定义的 python 类的 C 版本,因此将使用这些类,并且那些没有您要访问的成员。

于 2012-05-20T18:19:20.430 回答
0

我尝试子类化 datetime 以向其中添加一些信息

不要那样做。日期时间和纬度/经度信息的组合在逻辑上不是日期时间的子类型。它是两位数据的组合。

因此,创建一个类,该类具有存储日期时间的属性和存储纬度/经度信息的属性(您可能会考虑使用 2 个数字的元组而不是具有两个单独的值)。

于 2012-05-20T18:38:56.750 回答