7

我是 Python 初学者,我的主要语言是 C++。您知道在 C++ 中,将类的定义和实现分开是很常见的。(如何)Python 会这样做吗?如果没有,我如何获得一个类接口的干净配置文件?

4

4 回答 4

6

Python中没有这样的概念。如果我正确理解了您的需求,则应通过适当的类文档生成“干净的配置文件”。

您还可以使用 Python 的自省功能以编程方式访问类的所有方法

于 2012-09-22T08:27:53.473 回答
1

Python 编程在许多方面与 c++ 不同。如果您想知道如何在 python 中编写高质量、专业级别的代码,那么是一篇很好的文章。祝你好运。

于 2012-09-22T08:41:03.690 回答
1

    出于某种原因,许多 Python 程序员将类及其实现组合在同一个文件中。我喜欢将它们分开,除非绝对有必要这样做。
    这很容易。只需创建实现文件,导入定义类的模块,直接调用即可。
    因此,如果类 - ShowMeTheMoney - 在class1_file.py中定义,并且文件结构为:

  
/project
    /classes
           /__init__.py
           /class1_file.py
           /class2_file.py
    /class1_imp_.py   
  

(顺便说一句,文件名和名必须不同;如果名和文件名相同,程序将失败。)
    您可以在class1_imp_.py中使用:

 
   # class1_imp_.py
   import classes.class1_file as any_name

   class1_obj = any_name.ShowMeTheMoney()
   #continue the remaining processes


 

希望这可以帮助。

于 2012-09-22T10:37:37.023 回答
0

您可能想要实现一种可以与您的实现分开导入的“接口”。在 python 中,这称为抽象基类,通过内置 abc 模块提供

# mymodule/types.py
# --------------------------------------------

import abc

class AbstractSomeClass(abc.ABC):
  some_property: str

  @abc.abstractmethod
  def somemethod(self, some_param: str) -> int:
    raise NotImplementedError


# mymodule/someclass.py
# --------------------------------------------

from mymodule.types import AbstractSomeClass

class SomeClass(AbstractSomeClass):
  def __init__(self):
    self.some_property = "some val"

  def somemethod(self, some_param: str) -> int:
    return 5


# mymodule/file_causing_circular_import.py
# --------------------------------------------
# Refactored to use the ABC instead of the implementation

from mymodule.types import AbstractSomeClass

def mymethod(instance: AbstractSomeClass):
  instance.somemethod("some param")
`
于 2022-01-02T22:42:31.563 回答