类与函数:如果在Python中使用类,是否需要使用“self”关键字?

2024-09-28 21:02:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据工程项目,从联邦政府网站上获取一些数据并转换这些数据。对于是否需要使用“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”,这是否会被认为是糟糕的代码?或者我应该删除这些类,在我的文件中使用一些函数吗


Tags: 数据fromselfdfdatagetreturndef
3条回答

如果在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行,而不必处理类。那你就可以了

from data import GetGovtData

df1 = GetGovtData.get_data_1()

根据您的设置,您可能需要创建一个空文件data/__init__.py,以便Python将data视为一个模块

编辑:关于文件命名,Python在这里没有施加任何太严格的限制。但是请注意,许多项目通常使用camelCase或CapitalCase来区分函数、类和模块名。将CapitalCase用于模块可能会让其他人一时糊涂,以为它是一个类。如果不想在项目中使用类,可以选择不遵循此约定

相关问题 更多 >