我正在网页上删除一个包含电子竞技比赛列表的网页:https://www.over.gg/matches
如您所见,每一行都会重复比赛的名称。在我的代码中,锦标赛是它自己的类,由几个即时创建的属性和名称组成。
这个想法是,对于给定的行/匹配,我想检查是否已经在作用域中创建了锦标赛类的实例(通过检查name属性),所以我不创建新的锦标赛对象每场比赛。相反,我只是将比赛“附加”到已经存在的锦标赛。
我可以手动创建我在执行期间创建的每个对象的列表,并且每次检查对象是否已经存在,但我想知道是否有内置且更智能的方法。
就像检查数据库中是否已有一个具有相同主键的记录一样,以避免创建新主记录。我找到了一些线索,但没有明确说明我的问题。
答案 0 :(得分:0)
I used the Flyweight Pattern as suggested by avix and as explained on this article by Yannick Loiseau,尤其是四人帮版。
为了创建类,这给出了:
class FlyweightFactory(object):
def __init__(self, cls):
self._cls = cls
self._instances = dict()
def get_instance(self, *args, **kargs):
return self._instances.setdefault((args, tuple(kargs.items())), self._cls(*args, **kargs))
class Match(object):
def __init__(self, link, tournament):
self.tn = tournament
self.link = link
MatchFactory = FlyweightFactory(Match)
然后我编写了一个简单的检查函数,以便在创建时验证对象是否已存在:
def get_match_object(link, tournament):
try:
match = MatchFactory.get_instance(link, tournament)
except:
match = Match(link, tournament)
也参加了锦标赛和比赛。团队课程,它完美无缺。