我有一个数据工程项目,从联邦政府网站上获取一些数据并转换这些数据。对于是否需要使用“self”关键字,或者根本不使用类是更好的做法,我有点困惑。这是它目前的组织方式:
class GetGovtData():
def get_data_1(arg1=0, arg2=1):
df = conduct_some_operations
return df
def get_data_2(arg1=4, arg2=5):
df = conduct_some_operations_two
return df
我在这里主要使用一个类来进行组织。例如,我需要使用一个类中的十几个不同方法。我发现键入以下内容更美观/更容易:
from data.get_govt_data import GetGovtData
df1 = GetGovtData.get_data_1()
df2 = GetGovtData.get_data_2()
而不是:
from data import get_govt_data
df1 = get_govt_data.get_data_1()
df2 = get_govt_data.get_data_2()
有很多下划线。所以我只是好奇,如果使用这样一个类而不考虑“self”,这是否会被认为是糟糕的代码?或者我应该删除这些类,在我的文件中使用一些函数吗
如果在Python类中开发函数,可以使用两种方法定义函数:一种是使用self作为第一个参数,另一种是不使用self
那么,这两者有什么不同呢
具有self
第一个是方法,它能够访问所创建对象中的内容。这允许您访问单个对象的内部状态,例如某种计数器。这些是使用面向对象编程时通常使用的方法。简短的介绍可以是fundhere [External Link]。这些方法要求您创建给定类的新实例
无自我功能
函数而不初始化类的实例。这就是为什么可以在导入的类上直接调用它们
替代解决方案
这是基于Tom K的注释。您也可以使用decorator
@staticmethod
来指示方法在类中的角色,而不是使用self。可以在here [External link]找到更多信息最后的想法
回答您的初始问题:您不需要使用
self
。在您的情况下,您不需要self,因为您不共享对象的内部状态。然而,如果您使用类,您应该考虑面向对象的设计首先回答标题中的问题:确切的字符串“self”是一个约定(顺便说一句,我看不出有任何有效的理由忽略它),但是类方法中的第一个参数始终是对类实例的引用
应该使用类还是平面函数取决于函数是否具有共享状态。从您的场景来看,它们可能有一个公共的基本URL、身份验证数据、数据库名称等。您甚至需要先建立连接吗?所有这些最好放在课堂上,然后在函数中使用
我想您有一个名为
data/get_govt_data.py
的文件,其中包含您的第一个代码块。如果愿意,您可以将该文件重命名为data/GetGovtData.py
,删除class
行,而不必处理类。那你就可以了根据您的设置,您可能需要创建一个空文件
data/__init__.py
,以便Python将data
视为一个模块编辑:关于文件命名,Python在这里没有施加任何太严格的限制。但是请注意,许多项目通常使用camelCase或CapitalCase来区分函数、类和模块名。将CapitalCase用于模块可能会让其他人一时糊涂,以为它是一个类。如果不想在项目中使用类,可以选择不遵循此约定
相关问题 更多 >
编程相关推荐