在python中创建用户定义类的对象集

Kavit Shah
table = set([])

class GlobeLearningTable(object):
    def __init__(self,mac,port,dpid):

        self.mac = mac
        self.port = port
        self.dpid = dpid

    def add(self):

        global table
        if self not in table:
            table.add(self)

class LearningSwitch(object):
    def __init__ (self, connection, transparent):
       self.connection = connection
       self.transparent = transparent
       self.macToPort = {}
       connection.addListeners(self)
       self.hold_down_expired = _flood_delay == 0

    def _handle_PacketIn (self, event):
       packet = event.parsed
       self.macToPort[packet.src] = event.port # 1
       packet_src = str(packet.src)
       packet_mac = packet_src.upper()
       entry = GlobeLearningTable(packet_mac, event.port, dpid_to_str(self.connection.dpid))
       entry.add()

问题:entry.add()方法每次调用时都会添加新对象,并增加表中的项目。

这不应该发生,因为

  1. 在add方法中,我要检查表中是否存在该对象,然后添加该特定对象。
  2. 表是一组无序列表,不应有重复的对象。

帮助:这种设置有什么办法,我只能在对象不在表中时添加它。

马丁·彼得斯(Martijn Pieters)

您需要实现__eq____hash__方法来教Python如何识别唯一GlobeLearningTable实例。

class GlobeLearningTable(object):
    def __init__(self,mac,port,dpid):
        self.mac = mac
        self.port = port
        self.dpid = dpid

    def __hash__(self):
        return hash((self.mac, self.port, self.dpid))

    def __eq__(self, other):
        if not isinstance(other, type(self)): return NotImplemented
        return self.mac == other.mac and self.port == other.port and self.dpid == other.dpid

现在,您的对象是可比较的,相等的对象也将返回相等的值__hash__这让setdict对象有效地存储你的对象,并检测它是否已经存在:

>>> demo = set([GlobeLearningTable('a', 10, 'b')])
>>> GlobeLearningTable('a', 10, 'b') in demo
True

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在python中创建用户定义类的对象集

来自分类Dev

在类定义中创建对象

来自分类Dev

如何在以用户定义的类对象作为类成员的Java中创建用户定义的不可变类?

来自分类Dev

Java TreeMap中的用户定义的类对象

来自分类Dev

如何在Kettle的用户定义的Java类中创建ArrayList对象?

来自分类Dev

如何创建用户定义的类型模板类对象C ++

来自分类Dev

在Python中的类中创建对象

来自分类Dev

如何从用户的类创建对象?

来自分类Dev

在Python中创建的类的对象问题

来自分类Dev

在 Django 中创建自定义用户类

来自分类Dev

在类中创建对象

来自分类Dev

根据用户选择从类模板中定义对象并解决本地定义对象的范围-新问题

来自分类Dev

如何使用用户定义的相等函数在Javascript中创建一组用户定义的对象?

来自分类Dev

在数据库Java中从超类null继承的类集属性中创建对象

来自分类Dev

在 Python3 中如何使用户定义的类对象可以通过索引( obj[ i ] )获取元素?

来自分类Dev

语法错误:缺少';' 创建用户定义的抽象类的指针对象时,在“ *”之前

来自分类Dev

根据用户输入从Python中的类对象获取值

来自分类Dev

java用户定义的类和对象

来自分类Dev

从python的列表(玩家的手)中删除用户定义的对象(卡)

来自分类Dev

从嵌套的用户定义对象创建DataFrame

来自分类Dev

从嵌套的用户定义对象创建DataFrame

来自分类Dev

python中的对象类类型是在其内部定义的吗?

来自分类Dev

Python:如何理解内置对象类中定义的 __new__ ?

来自分类Dev

如何在Python中创建包含类实例的对象?

来自分类Dev

C ++-在类定义末尾创建的对象的范围

来自分类Dev

C ++-在类定义末尾创建的对象的范围

来自分类Dev

创建自定义对象类android

来自分类Dev

在类中创建对象数组

来自分类Dev

在Python中创建自定义对象,仅保留数据

Related 相关文章

  1. 1

    在python中创建用户定义类的对象集

  2. 2

    在类定义中创建对象

  3. 3

    如何在以用户定义的类对象作为类成员的Java中创建用户定义的不可变类?

  4. 4

    Java TreeMap中的用户定义的类对象

  5. 5

    如何在Kettle的用户定义的Java类中创建ArrayList对象?

  6. 6

    如何创建用户定义的类型模板类对象C ++

  7. 7

    在Python中的类中创建对象

  8. 8

    如何从用户的类创建对象?

  9. 9

    在Python中创建的类的对象问题

  10. 10

    在 Django 中创建自定义用户类

  11. 11

    在类中创建对象

  12. 12

    根据用户选择从类模板中定义对象并解决本地定义对象的范围-新问题

  13. 13

    如何使用用户定义的相等函数在Javascript中创建一组用户定义的对象?

  14. 14

    在数据库Java中从超类null继承的类集属性中创建对象

  15. 15

    在 Python3 中如何使用户定义的类对象可以通过索引( obj[ i ] )获取元素?

  16. 16

    语法错误:缺少';' 创建用户定义的抽象类的指针对象时,在“ *”之前

  17. 17

    根据用户输入从Python中的类对象获取值

  18. 18

    java用户定义的类和对象

  19. 19

    从python的列表(玩家的手)中删除用户定义的对象(卡)

  20. 20

    从嵌套的用户定义对象创建DataFrame

  21. 21

    从嵌套的用户定义对象创建DataFrame

  22. 22

    python中的对象类类型是在其内部定义的吗?

  23. 23

    Python:如何理解内置对象类中定义的 __new__ ?

  24. 24

    如何在Python中创建包含类实例的对象?

  25. 25

    C ++-在类定义末尾创建的对象的范围

  26. 26

    C ++-在类定义末尾创建的对象的范围

  27. 27

    创建自定义对象类android

  28. 28

    在类中创建对象数组

  29. 29

    在Python中创建自定义对象,仅保留数据

热门标签

归档