我经常使用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命名空间中看到,有没有办法避免这种情况?
答案 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)