在python中拆分classmethods

时间:2013-12-09 10:37:49

标签: python python-2.7

我经常使用classmethods而不是python中的默认构造函数,例如:

class Data(object):
    def __init__(self, x, y, z):
        self.x = x etc..

    @classmethod
    def from_xml(cls, xml_file):
        x, y, z  = import_something_from_xml(xml_file)
        return cls(x,y,z)

这种方法效果很好, 但由于我经常有大型的类方法构造函数,我想把它们分成较小的函数。我的问题是,这些较小的函数可以在Class命名空间中看到,有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:3)

您可以将较小的辅助函数标记为私有:

@classmethod
def __import_something_from_xml(cls, data):
    #logic
    return a, b, c

你会跑:

@classmethod
def from_xml(cls, xml_file):
    x, y, z  = cls.__import_something_from_xml(xml_file)
    return cls(x,y,z)

请记住,这只是命名约定,可以从Data namespace访问此方法。

或者你可以指定一个助手类:

class XMLDataHelper:
    @staticmethod
    def import_something_from_xml(data):
        #logic
        return a, b, c

代码看起来像这样

@classmethod
def from_xml(cls, xml_file):
    x, y, z  = XMLDataHelper.import_something_from_xml(xml_file)
    return cls(x,y,z)