我知道我应该使用访问方法。我在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
我还看到日期时间能够访问日期成员,如__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
的私有变量,但我的子类不能。
答案 0 :(得分:4)
如果查看end of datetime.py
,您会看到:
try:
from _datetime import *
except ImportError:
pass
这会导入以前定义的python类的C版本,因为它们将被使用,而那些没有您尝试访问的成员。
答案 1 :(得分:0)
我尝试将datetime子类化为其添加一些信息
不要那样做。日期时间和纬度/经度信息的组合在逻辑上不是日期时间的子类型。它是两位数据的组合。
因此,创建一个具有存储日期时间和属性的属性的类来存储纬度/经度信息(您可以考虑使用2个数字的元组而不是具有两个单独的值)。