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]

__repr__datetime をサブクラス化して情報を追加し、同様の関数を記述しようとしました。

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 ビットのデータの組み合わせです。

そのため、日時を格納する属性と緯度/経度情報を格納する属性を持つクラスを作成します (2 つの個別の値ではなく、2 つの数値のタプルを使用することを検討してください)。

于 2012-05-20T18:38:56.750 に答える