猿问

在拆分方法中传递参数

我需要将类方法拆分为多个文件。功能需要通过,我可以在方法内部传递在self中定义的所有变量,并接收在方法内部定义的新self变量。


我的尝试:


下面的代码有效,但我不知道这是否是最佳/正确的解决方案。


基础:


from calculate_function import function



class 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 变量/结果。


在不同的文件中将有更多的函数,这些函数将完成一些计算并为类实例创建新变量。


问题


我需要的是将每个创建的自变量传递给每个函数。对于上面的代码,解决方案是正确定义的,还是有更好的选择?


智慧大石
浏览 103回答 3
3回答

叮当猫咪

如果你想将类代码的某些部分外部化到外部函数,最好将它们编写为纯函数,并将属性访问(甚至更多的属性更新)保留在类代码本身中 - 这使得代码更容易测试,阅读和维护。在你的情况下,这看起来像这样:from calculate_function import functionclass 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我需要将类方法拆分为多个文件。这通常意味着你的班级有太多的责任。它的某些部分可以委托给纯函数,如上所示。其他一些需要访问类属性的公共子集的部分可以委托给其他较小的专用类 - 但最好使用组合/委派而不是继承(当然取决于具体的用例)。

小唯快跑啊

你不需要在函数内部传递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 函数或仅使用独立函数?

慕村9548890

下面是使用类继承的解决方案:-- 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 FunctionClass1from function2 import FunctionClass2 class Data(FunctionClass1, FunctionClass2):     def __init__(self):             self.x = 1             self.y = 2             self.z = 3             self.function1()             self.function2()
随时随地看视频慕课网APP

相关分类

Python
我要回答