为了账号安全,请及时绑定邮箱和手机立即绑定

在拆分方法中传递参数

在拆分方法中传递参数

智慧大石 2022-09-06 16:38:05
我需要将类方法拆分为多个文件。功能需要通过,我可以在方法内部传递在self中定义的所有变量,并接收在方法内部定义的新self变量。我的尝试:下面的代码有效,但我不知道这是否是最佳/正确的解决方案。基础:from calculate_function import functionclass Data():    def __init__(self):        self.y = -2        self.x = 1        self.z, self.result = function(self)calculate_function.py:def function(self):    z = 2    result = z + self.x    return z, result对于上述内容,我在新函数中传递 self 以收集所有 init 变量,然后定义新的 self 变量/结果。在不同的文件中将有更多的函数,这些函数将完成一些计算并为类实例创建新变量。问题我需要的是将每个创建的自变量传递给每个函数。对于上面的代码,解决方案是正确定义的,还是有更好的选择?
查看完整描述

3 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

如果你想将类代码的某些部分外部化到外部函数,最好将它们编写为纯函数,并将属性访问(甚至更多的属性更新)保留在类代码本身中 - 这使得代码更容易测试,阅读和维护。在你的情况下,这看起来像这样:


from calculate_function import function



class Data():

    def __init__(self):

        self.y = -2

        self.x = 1

        self.z, self.result = function(self.x)

calculate_function.py:


def function(x):

    z = 2

    result = z + x

    return z, result

这里的要点是1/您可以立即发现属性的创建,2/您可以在没有实例的情况下进行测试。zresultfunction()Data


我需要将类方法拆分为多个文件。


这通常意味着你的班级有太多的责任。它的某些部分可以委托给纯函数,如上所示。其他一些需要访问类属性的公共子集的部分可以委托给其他较小的专用类 - 但最好使用组合/委派而不是继承(当然取决于具体的用例)。


查看完整回答
反对 回复 2022-09-06
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

你不需要在函数内部传递self为什么不这样做:


class Data():

    def __init__(self):

        self.y = -2

        self.x = 1

        self.function()


    def function(self):

        self.z = 2

        self.result = self.z + self.x

是否希望使用另一个 Class 函数或仅使用独立函数?


查看完整回答
反对 回复 2022-09-06
?
慕村9548890

TA贡献1884条经验 获得超4个赞

下面是使用类继承的解决方案:


-- function1.py --

class FunctionClass1():

     def function1(self):

             self.result = self.x + self.y


-- function2.py -- 

class FunctionClass2():

     def function2(self):

             self.result = self.result + self.z


-- data.py -- 

from function1 import FunctionClass1

from function2 import FunctionClass2 



class Data(FunctionClass1, FunctionClass2):

     def __init__(self):

             self.x = 1

             self.y = 2

             self.z = 3

             self.function1()

             self.function2()


查看完整回答
反对 回复 2022-09-06
  • 3 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信