从模块导入Python自定义模块只有一个公共方法

时间:2014-06-13 20:19:32

标签: python static-methods python-decorators

有关静态方法和私有方法的问题....

我们说我有这样的事情:

    class MyClass(object):

        @staticmethod
        def __methodA(a):
            return a

        @staticmethod
        def __methodB(b):
            return b

        @staticmethod
        def __methodC(c):
            return c

        @staticmethod
        def getAddition(a, b, c):
            a = MyClass.__methodA(a)
            b = MyClass.__methodB(b)
            c = MyClass.__methodC(c)
            return a + b + c

我真的只想要一个方法公开,我有一大堆辅助方法。对我来说,没有@staticmethod似乎很愚蠢,因为那时我必须做这样的事情:

from myModule import MyClass
myClass = MyClass()
myClass.getAddition(1,2,3)

但是使用@staticmethod我可以做到这一点(这对我来说更有意义,因为我只调用一件事):

from myModule import MyClass
MyClass.getAddition(1,2,3)

我知道以前曾问过这些类型的问题。但我特别想知道,如果让我们说50个辅助方法并且仍然只有一个公共方法,那么使用@staticmethod做这样的事情是不好的做法。

这个类可能会被很多人使用,我不知道为一个方法显式创建该对象是否有意义。

1 个答案:

答案 0 :(得分:0)

我认为你的方法很好。或者,您可以使用模块而不是使用静态方法的类,因为当您不打算创建类的实例时,不需要创建类。

在Python私有方法中不是限制,而是推荐,因此无需限制对此类方法的访问。在开头用下划线表示这种方法就足够了。

以下是模块而不是类的示例:

// mymodule.py

def _methodA(a):
    return a

def _methodB(b):
    return b

def _methodC(c):
    return c

def getAddition(a, b, c):
    a = _methodA(a)
    b = _methodB(b)
    c = _methodC(c)
    return a + b + c

// user code

import mymodule

mymodule.getAddition(1, 2, 3)