我发现有时候为一个模块取名很难,因为之后容易与变量名冲突。例如,我有一个如下的类:
class Petition(object):
def __init__(self, signature_count_requirement):
self._signature_count_requirement = signature_count_requirement
以及下面的函数:
def check_if_someone_can_sponsor_a_petition(someone):
pass
因此,编写如下代码是很自然的:
if check_if_someone_can_sponsor_a_petition(a):
petition = Petition(3)
我希望将这个函数和 Petition
类放到一个模块中。那么我应该给这个模块起什么名字呢?将其命名为 petition
似乎很自然。但是后面很容易出现变量名称冲突,如下所示:
import petition
if petition.check_if_someone_can_sponsor_a_petition(a):
petition = petition.Petition(3) # this is ugly.
datetime
模块可能是一个更好(或更糟?)的例子。当在代码中遇到名称datetime
时,我经常需要确保它是模块名称、类名称还是某个变量名称。
是否有任何良好的约定来命名模块以避免与后面的变量名称冲突?
import petition as m_petition
。 - qvphamdatetime
时,我想将其作为m_datetime
导入。但这需要导入模块的人注意一下。但人们经常犯错误,所以我认为更好的解决方法是以更好的方式命名模块。 - kkpatternrequests
。有人可能会认为get
或post
是模糊的名称,但归根结底,通过使用命名空间,可以得到干净、简洁和自我解释的调用requests.get(url)
。 - Łukasz Rogalskicheck_if_someone_can_sponsor_a_petition
应该重命名。从使用(即调用站点)开始,可以是例如petition.can_be_sponsored(...)
(更好,但是什么是“can be”),因此petition.is_sponsored(...)
和petition.is_valid(...)
后者意味着“遵循规则,因此理论上可以赞助”... 您可以采用面向对象编程,其中petition
是一个对象,具有诸如.valid
和.sponsored
以及一些方法的属性。 - Dima Tisnek