python
  • python-2.7
  • 2013-05-04 3 views 0 likes 
    0

    저는 python에 대해 매우 익숙합니다. 일부 Python 코드로 작업하고 있습니다. Python 객체 지향 개념을 C++에 매핑하려고합니다. 배울 좋은 방법이라고 생각합니다. 건너 뛸 수 있습니다. 두 가지 유형의 클래스 정의.Python의 클래스 정의 구문

    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 
    

    및 두 번째 것.

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

    SourcetoPort의베이스와 튜토리얼의 개체 사이의 차이점을 알고 싶습니다.

    +1

    차이점은 무엇입니까? SourcePort는 Base에서 파생되었으며 Tutorial은 객체에서 상속됩니다. –

    +0

    ['object']에 대한 설명서는 다음과 같습니다 (http://docs.python.org/2/library/functions.html#object). [이 설명] (http://docs.python.org/2/glossary.html#term-new-style-class) (및 단락 하단에있는 링크)이 유용 할 수 있습니다. – Blender

    답변

    2

    첫 번째 경우에는 SQLAlchemy를 사용하는 것 같습니다. 당신은 분명히 선언의 차이 (또는 오히려 실행)를 놓칠 수 없습니다.

    Python classes are rather different from classes in static languages 이외에도 SourcePort 클래스는 메타 클래스에 따라 달라집니다.

    metaclass은 본질적으로 클래스 내용을 변경하거나 동적으로 생성 할 수있는 기능입니다. 그것은 C++ 템플릿을 연상케하지만 런타임에 작동합니다 (Python에서는 모든 것이 런타임에 발생합니다).

    이상한 Base 클래스 나 그 부모 중 일부에 메타 클래스가 바인딩되어 있습니다. class SourcePort... 문이 실행 된 후 SourcePort 클래스의 내용이 메타 클래스에 의해 수정됩니다. 메타 클래스는 테이블 이름, 열 등을 설명하는 초기 속성을 읽고 SourcePort 필드에 이름으로 데이터베이스 필드에 액세스하는 다양한 방법을 추가합니다 (처음에 그렇게 선언 된 경우 열 내용을 느리게로드 할 수있는 getter). SourcePort 인스턴스의 '더티'상태를 변경하는 설정자, ORM 객체를 데이터베이스 세션에 바인딩하는 모든 기법 등을 포함합니다.

    그렇습니다. 심각한 차이가 있습니다.

    자발적인 조언 : Python 클래스를 더 잘 이해하기 위해 C++ 클래스와 유추하려고하지 마십시오. 그들은 몇 가지 특징을 공유하지만 차이점이 있습니다. 마치 파이썬 클래스가 완전히 외계인 개념 인 것처럼 배우십시오.

    2

    object을 부모로 갖는 새로운 스타일 클래스가 도입되었습니다. object을 (상위) 상위 항목으로 지정하지 않으면 이전 스타일의 클래스가됩니다. Python 3에서는 모든 클래스가 "새로운"클래스입니다.

    object의 상속은 설명자, 속성 등을 포함하여 많은 것을 제공합니다. 사용하지 않더라도 어쨌든 object을 상속하는 것이 좋습니다.

    관련 문제