0

I am very new to python.I am working with some python code.I am trying to map the python object oriented concepts to those of C++ which I think is a good way to learn.I can across two types of class definitions.

class SourcetoPort(Base):
    """"""
    __tablename__ = 'source_to_port'
    id = Column(Integer, primary_key=True)
    port_no        = Column(Integer)
    src_address    = Column(String)

    #----------------------------------------------------------------------
    def __init__(self, src_address,port_no):
        """"""
        self.src_address = src_address    
    self.port_no     = port_no

and the second one.

class Tutorial (object):
  def __init__ (self, connection):
    print "calling Tutorial __init__"
    self.connection = connection
    connection.addListeners(self)
    self.mac_to_port = {} 
    self.matrix={} 

I want to know what is the difference between the Base in SourcetoPort and object in Tutorial?

4

2 回答 2

2

您似乎在第一种情况下使用 SQLAlchemy。您绝对不能错过声明(或者更确切地说,执行)的差异。

除了Python 类与静态语言中的类有很大不同之外,您的SourcePort类还依赖于元类。

元类本质上是一个可以改变或动态生成类内容的函数。它在某种程度上让人想起 C++ 模板,但在运行时起作用(在 Python 中,一切都发生在运行时)。

所以那个奇怪Base的类,或者它的一些父类,有一个绑定到它的元类。class SourcePort...语句执行后,类的内容SourcePort被元类修改。元类读取解释表名、列等的初始属性,并添加到SourcePort各种方法以按名称访问数据库字段,就好像它们是SourcePort的字段一样,可能会延迟加载列内容的 getter(如果最初声明的话),setter更改SourcePort实例的“脏”状态、将 ORM 对象绑定到数据库会话的所有机制等。

所以是的,有一个严重的区别。

一些不请自来的建议:为了更好地理解 Python 类,不要试图类比 C++ 类。他们有一些共同的特征,但有很多不同之处。只需了解 Python 类,就好像这些是一个完全陌生的概念。

于 2013-05-04T07:06:25.213 回答
2

在 Python 2.2 中引入了新的样式类,它应该object作为父类。如果没有object(祖)父母,这将是一个老式的课程。在 Python 3 中,所有类都是“新的”。

继承object提供了许多不错的特性,包括描述符、属性等。即使您不打算使用它们,继承也是个好主意object

于 2013-05-04T06:56:12.717 回答