我是OOP的新手,所以这也许是一种反模式,但是我有一个课程:
class SomeObject:
""" WIP OBJECT """
parsed_dates = []
def __init__(self, description, weekdays, months):
self.description = str(description)
self.weekdays = frozenset(SomeObject.flatn(weekdays)) # flat set of ints
self.months = frozenset(SomeObject.flatn(months)) # flat set of ints
def __repr__(self):
return self.description
( ... )
def accepts(self, dt):
return any([
dt.weekday() in self.weekdays,
dt.month in self.months,
])
我建立一个defaultdict与:
def main(dt_start, dt_end, s: str):
d = defaultdict(list)
description = pull_desc(s=s)
active_days = convert_tuples_to_numpy_array(description, np.str)
SomeObject.active_days(active_days_for_meter)
for test_set in SomeObject.parsed_dates:
for dt in [dt for dt in SomeObject.date_range(dt_start, dt_end) if test_set.accepts(dt)]:
# add the datetime objects to a list of values with the description as the key
d[test_set].append(str(dt.isoformat()))
return d
哪个返回:
defaultdict(<class 'list'>, {['Saturdays']: ['2020-01-04', '2020-01-11', '2020-01-18']}
现在,当我比较该defaultdict()的键(类似于列表)说时,Python不能将键识别为类型
'__main__.SomeObject'>
而不是类型list
即:
dic = {"Saturday": 1}
for k1, v2 in dic.items()
for k2, v2 in defaultdict.items():
if k1 == k2:
print("Chicken Wing")
鸡翼永远不会打印,因为
type(k1) = <str>
和
type(k2) = '<__main__.SomeObject'>
我该如何解决?
我对OOP到底有什么误解?
我应该阅读哪些概念以帮助我理解?
感谢所有信息,谢谢
最佳答案
因此,事实证明test_set
是SomeObject
的实例,这就是type(k2) = '<__main__.SomeObject'>
的原因。
似乎您缺少的是:
d[str(test_set)].append(str(dt.isoformat()))
然后您的
__repr__()
方法将启动。更新:
main()
返回defaultdict(<class 'list'>, {'Saturdays': ['2020-01-04', '2020-01-11', '2020-01-18']}
的原因是您有一个__repr__()
方法,并且defaultdict
在字典的每个键上都调用str()
。