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