如何检查具有特定属性的类的实例是否存在

时间:2018-06-18 12:50:32

标签: python

我正在网页上删除一个包含电子竞技比赛列表的网页:https://www.over.gg/matches

如您所见,每一行都会重复比赛的名称。在我的代码中,锦标赛是它自己的类,由几个即时创建的属性和名称组成。

这个想法是,对于给定的行/匹配,我想检查是否已经在作用域中创建了锦标赛类的实例(通过检查name属性),所以我不创建新的锦标赛对象每场比赛。相反,我只是将比赛“附加”到已经存在的锦标赛。

我可以手动创建我在执行期间创建的每个对象的列表,并且每次检查对象是否已经存在,但我想知道是否有内置且更智能的方法。

就像检查数据库中是否已有一个具有相同主键的记录一样,以避免创建新主记录。我找到了一些线索,但没有明确说明我的问题。

1 个答案:

答案 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)

也参加了锦标赛和比赛。团队课程,它完美无缺。