【发布时间】:2013-11-29 20:48:55
【问题描述】:
我已经定义了一个模块来处理多种类型的数据文件(例如 filetypes.py)。在其中,我定义了一个基类来处理文件打开和一些基本处理,这些基本处理由特定于每种数据文件类型的其余类继承。在每个类中,我使用 __init__() 方法来初始化一些类变量,并使用另一种方法来读取具有作为输入文件名的数据文件(此操作不能在 __init__() 方法中完成)。比如:
class maintype(object):
"""main type class.""
def __init__(self):
self.a = 1
class filetype1(maintype):
"""file type 1 class."""
def __init__(self):
self.b = 1
def readfile(self, filename):
self.ifile = open(filename, 'rb')
从主代码调用这个模块,感觉有点不自然:
import filetypes
data = filetypes.filetype1()
data.readfile('some_file_name')
问题:在模块中定义一个返回类的函数而不是使用类方法不是更pythonic吗?比如:
def file_type1(filename):
class1 = filetype1()
class1.readfile(filename)
return class1
现在,它看起来像:
import filetypes
data = filetypes.file_type1('some_file_name')
我在网上搜索过,找不到任何有用的迹象...
【问题讨论】:
-
在我们担心 pythonic 之前,您应该首先意识到您使用了不正确的naming conventions 和术语。
maintype应该是MainType,readfile应该是read_file。readfile不是类方法(它是实例方法),函数file_type1正在返回类的实例,而不是返回类本身。至于这个问题,有时定义创建对象的函数然后在返回对象之前调用方法很有用。很难说这是否适合您的用例。 -
您对命名约定和术语是正确的,我对它们并不放心。我应该编辑问题还是保持原样?
-
现在我已经把我的问题用语言表达出来了,我一直在重新考虑我是否在开发模块的过程中走的是正确的道路。我将重点放在不同类型的文件上,而不是数据上。我正在看的是一个模块,独立于我正在阅读的文件类型,我总是得到相同的底层数据表示(我正在处理来自不同类型传感器/系统的采样数据)。这种另一种设想将使类的设计更加精简。
-
查看我编辑的答案,很抱歉假设您最初是迟到的,记得点赞并接受。
标签: function class python-2.7 methods