1

我目前正在用 python 为许多自定义公司工具编写一个包装器。

我基本上会将每个工具分解成自己的 py 文件,其中包含一个包含对该工具的调用作为方法的类。这些都将包含在一个包中。

然后会有一个主类,它会从包中导入所有内容,然后从每个类继承,从而表现为一个有凝聚力的类。

masterClass.py

pyPackage
- __ init__.py

- module1.py
--class Module1
---method tool1

- module2.py
--class Module2
---method tool2

etc

现在,我正在自动生成主类文件以从包模块继承,但我想知道是否有更优雅的方法来做到这一点?

IE

from package import *
class MasterClass(package.all):
    pass
4

1 回答 1

0

我不太确定您尝试创建一个master从所有其他较小类继承的较大类的原因是什么,但首先想到的是设计可能是倒退的。

您可能想要做的是拥有一个基类,您的所有命令模块都可以为其子类化。您可以使用包作为智能命名空间来收集类似的功能,例如“网络”或“压缩”等。

class ToolBase(object):
    # common functionality here

    # class attributes

    # base constructor

    # methods: static, class, instance

    pass


class Module1(ToolBase):

    def __init__(self):
        super(Module1, self).__init__()

class Module2(ToolBase):

    def __init__(self):
        super(Module2, self).__init__()

在这个基类示例中,每个子类都可以期望 ToolBase 的功能存在,包括来自构造函数的任何设置,例如数据库连接、套接字、资源。

也许是这样的项目结构:

pyPackage
    __init__.py 
        # class ToolBase
        # __all__ = ['network', 'compress']
    network/
        __init__.py
        module1.py
            # class Module1
    compress/
        __init__.py 
        module2.py
            # class Module2

更新

作为使用基类并拥有共享“端口”对象的一种方式,您可以将其设为仅初始化一次的类级别属性:

class ToolBase(object):
    _PORT = None

    def __init__(self):
        if self._PORT is None:
            self._PORT = "PORT"

    @property 
    def port(self):
        return self._PORT


class Foo(ToolBase):

    def go(self):
        print self.port

现在您的类本身就很有用,并且将共享端口对象。

于 2012-09-04T21:24:31.323 回答