2017-11-26 1 views
1

하드웨어 조작을위한 추상 함수를 제공하는 상위 클래스와이 상위 클래스를 서브 클래스화하는 클래스가 가득한 디렉토리가 있으며 하드웨어 특정 구현을 제공합니다 (예 : x86 함수, ARM 기능 ...). 디렉토리에서 파일을 가져오고 인스턴스화 할 Pythonic 방법을 찾고 있습니다.서브 클래스를 사용하여 파일을 정리하고로드하는 편리한 방법

현재 상위 클래스는 최상위 디렉토리에 있고 하위 클래스가있는 파일은 하위 디렉토리에 있습니다. 이는 스타일이나 구현 용이성을 위해 변경 될 수 있습니다.

하위 디렉토리에있는 모든 하드웨어 관련 클래스를 구성 파일에 정의하고 반입하여 반입하는 것이 바람직합니까? 또는 importlib을 사용하여 자동으로 수행하는 것이 더 좋습니다 (Python). 또는 그것은 중요하지 않습니까?

답변

1

빌드 폴더 구조 :

. 
├── arm (i kept this one empty, see similar x86 folder) 
├── hal 
│   ├── flags.py 
│   ├── __init__.py 
│   └── registers.py 
├── x86 
│   ├── flags.py 
│   ├── __init__.py 
│   └── registers.py 
└── 8086.py 

arm 폴더 안에 당신의 ARM 모듈을 넣어 86 모듈 x86 폴더 등등.

트리에서 hal 폴더로 표시되는 병렬 폴더에 하드웨어 상위 클래스를 넣으십시오. hal 폴더에있는 일반 모듈과 동일한 이름을 가진 각각의 아치 (각 폴더에있는)에 대해 특정 모듈을 가지고 있음을 알 수 있습니다 (그러나 이는 단지 제안 일뿐입니다).

상위 폴더에 8086.py과 같은 파일로 하드웨어를 빌드하십시오.

from x86 import Ax, Bx, ZF # only the classes you need 

ax = Ax() 
bx = Bx() 

# build your remaining CPU... 

샘플 hal/flags.py의 :

class ZeroFlag(): 
    pass 

샘플 hal/registers.py의 :

class Register: 
    pass 

샘플 hal/__init__.py의 :

from hal.registers import Register 
from hal.flags import ZeroFlag 
코드의 샘플 각 이제 x86/__init__.py

from .registers import * 
from .flags import * 

x86/flags.py

from hal import ZeroFlag 

class ZF(ZeroFlag): 
    pass 

샘플

from hal import Register 

class Ax(Register): 
    pass 

class Bx(Register): 
    pass 

x86/registers.py의 샘플의

샘플은 특정 모듈을 상속 hal에서 일반적인 클래스를 정의 할 수 있습니다 아치. 최상위 폴더 모듈에서는 이러한 특성을 가져 와서 CPU 또는 하드웨어를 만들 수 있습니다.

__init__.py 파일의 중요성에 주목하십시오. 폴더를 패키지로 변환합니다. __init__도 패키지 가져 오기에서 실행되므로 가져 오기 프로그램에서 사용할 수있게하려는 모든 패키지 모듈을 지정할 수 있습니다. 이 목록은 수입업자가 모든 이름을 가져 오도록 강요하지 않는다는 점에 유의하십시오. 원하는 것만 지정할 수 있습니다.

파일이 많으면 __init__.py 파일에 코드를 넣으면 수동으로 작성하는 대신 가져 오기를 자동화 할 수 있습니다.

1

하위 클래스를 다른 파일로 나누고 필요한 파일 만 가져 오는 기본 개념은 매우 평범합니다. 서브 클래스 폴더에 __init__.py 파일을 사용하고 import SubClass1, SubClass2, SubClass3, ...- 명령을 사용하십시오.

import folderOfSubClasses 

는 그 다음 __init__.py 파일이 실행됩니다 그리고 당신은 예상 된 결과가 : 그럼 당신은 단지 main.py에 말할 수 있습니다.

도와 드리겠습니다. 이와 같은

관련 문제