【发布时间】:2019-03-10 21:51:10
【问题描述】:
我正在尝试改进我的 python 代码并开始使用类来对相关的方法和变量进行分组。
使用能够访问在类中初始化的变量的函数时,最佳实践是什么?我应该只访问函数中的变量吗?还是显式传递变量以明确我依赖它?
我创建了两个示例来说明这个问题的含义。首选哪种方法?
# method 1
class UploadForm(object):
def __init__(self, form_data):
self.file_name = form_data.get('file_name')
def validate(self):
agency_name = self.extract_agency_name(self.file_name)
@staticmethod
def extract_agency_name(file_name):
pattern = re.search('^[CFS]Y\d{4} (.+?)[.](?:xls|csv)$', file_name, re.I)
if pattern:
agency_name = pattern.group(1)
return agency_name
# method 2
class UploadForm(object):
def __init__(self, form_data):
self.file_name = form_data.get('file_name')
def validate(self):
agency_name = self.extract_agency_name()
def extract_agency_name(self):
pattern = re.search('^[CFS]Y\d{4} (.+?)[.](?:xls|csv)$', self.file_name, re.I)
if pattern:
agency_name = pattern.group(1)
return agency_name
【问题讨论】:
-
如果你打算使用一个类来共享状态,那么是的,使用实例变量
-
方法二,界面尽量简洁。如果
extract_agency_name不是真正特定于任何对象,则使其成为类调用的模块函数,就像方法 1 中一样。 -
谢谢你们俩。我会坚持方法 2,并会考虑将这些函数移到课堂之外。
-
您的
pattern变量最好命名为match,因为它代表正则表达式匹配的结果,而不是用于搜索的模式。