python - 怎么换班为 Python 类型
问题描述
我是 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
IE:
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()
字典的每个键。
推荐阅读
- regex - Remove numbers except that are before the first underscores in R with gsub
- node.js - 使用 Node.js 在 AWS ElastiCach (Redis) 上出现“无法获得插槽分配”错误
- python - 如何在 docker 中使用 selenium?
- orange - 如何在 Orange 中使用“分组依据”.. 即我可以“分组依据”表值吗?
- php - 用户 'web'@'localhost' 远程 mysql 的访问被拒绝
- python - 如何从 Python 脚本将参数传递给 Google App Script API?
- matlab - 绘图错误:尝试将 SCRIPT 网格作为函数执行:
- java - 将 JSON 解析为对象
- ruby-on-rails - 如何向 Rails Mongodb 添加新列?
- c++ - 永远不要将 long 作为参数传递?