質問の不器用なタイトルで申し訳ありませんが、適切な表現方法が思いつきません。Python 2.7 でカレンダー型のアプリケーションを作成しています。Day
私はフォームのコンストラクタを持つクラスを持っています
def __init__(self, d):
# Date in datetime.date format
self.date = d
# Julian date
self.julian = date_utils.calendar_util.gregorian_to_jd(d.year, d.month, d.day)
# Sun and moon rise and set times
self.sun = RiseSet()
self.moon = RiseSet()
...
def SetSunRise(self, t):
assert type(t) is datetime.time
self.sun.rise = t
def SetSunSet(self, t):
assert type(t) is datetime.time
self.sun.set = t
はRiseSet
単純なクラスです:
def __init__(self, r=None, s=None):
# rise (r) and set (s) times should normally be datetime.time types
# but it is possible for there to
# be no sun/moon rise/set on a particular day so None is also valid.
if r is not None:
assert type(r) is datetime.time
if s is not None:
assert type(s) is datetime.time
if r is not None and s is not None:
assert r < s
self.rise = r
self.set = s
明らかにDay
、特定のカレンダーの各日用のオブジェクトがあります。これらは、datetime.date
と呼ばれる ( をキーとする)辞書に含まれていdays
ます。sunrises
これでsunsets
、問題moonrises
の期間の日の出/月の出/入時刻を含む 4 つのリストがmoonsets
できDay
ましたdays
。
これで、4 つのリストのそれぞれを通過する 4 つの個別のループを持つことができました。しかし、私が本当にやりたいのは、関数へのポインターのようなものを効果的に使用して、次のようなものを作成できるようにすることです。
for (func, obj) in zip([Day.SetSunRise, Day.SetSunSet, Day.SetMoonRise, Day.SetMoonSet], [sunrises, sunsets, moonrises, moonsets])
したがって、私が実際にやろうとしているのは、関数へのポインターを取得することですが、そのクラスの個々のオブジェクト/インスタンスではなく、クラス定義に基づいています。これを行うためのシンプルでエレガントな方法があるに違いないと確信していますが、現在困惑しています。
誰か?