在Python中使用类不会初始化构造函数中的所有有效值

在Python中使用类不会初始化构造函数中的所有有效值,python,class,Python,Class,在网上查找之后,有几种方法可以使用pythonic方法来定义类,但不是我所寻找的方法。我正在初始化所有变量,两个函数都需要它们。我想要的是,不是每个函数都需要使用所有变量,而是只需要使用所需的变量,因此并非所有变量都不需要初始化: 我有以下测试代码: class TestClass: def __init__(self,a,b,c,d): self.a = a self.b = b self.c = c self.d

在网上查找之后,有几种方法可以使用pythonic方法来定义类,但不是我所寻找的方法。我正在初始化所有变量,两个函数都需要它们。我想要的是,不是每个函数都需要使用所有变量,而是只需要使用所需的变量,因此并非所有变量都不需要初始化:

我有以下测试代码:

class TestClass:

    def __init__(self,a,b,c,d):

        self.a  = a
        self.b  = b
        self.c = c
        self.d = d

    def CalcA(self):

        TestA = self.a + self.b

        return TestA

    def CalcB(self):

        TestB = self.c * self.d

        return TestB

if __name__ == '__main__':

    a=5.0
    b=10.0
    c=2.0
    d =0.01

    TestingTheClass = TestClass(a,b,c,d)
    NewCalcA = TestingTheClass.CalcA()
    NewCalcB = TestingTheClass.CalcB()

    print(NewCalcA)
    print(NewCalcB)

摆脱额外变量的一种可能性(如果您正在寻找)是简单地使用a和b并重新定义它们,这样您在每个类的头中的代码将是:

def CalcA(self, a, b):

def CalcB(self, c, d):
然后,在底部处理这些问题的代码如下所示:

a=5.0
b=10.0

TestingTheClass = TestClass()
NewCalcA = TestingTheClass.CalcA(a, b)
a = 2
b = 0.01
NewCalcB = TestingTheClass.CalcB(a, b)

这使得一次只有两个变量,它们只为下一个函数定义,因此在
CalcA()
之后,您可以去掉变量中的值来执行
CalcB()
的变量。

这很难理解您在这里要求什么,但是我认为您可能需要检查默认值的用法,并将参数作为未打包的字典传递。像这样:

class TestClass:

    def __init__(self,a=0,b=0,c=0,d=0):

        self.a  = a
        self.b  = b
        self.c = c
        self.d = d

    def CalcA(self):

        TestA = self.a + self.b

        return TestA

    def CalcB(self):

        TestB = self.c * self.d

        return TestB

if __name__ == '__main__':
    params={"a": 5.0, "b": 10.0}

    TestingTheClass = TestClass(**params)
    NewCalcA = TestingTheClass.CalcA()
    NewCalcB = TestingTheClass.CalcB()
    print(NewCalcA) #15.0
    print(NewCalcB) #0

    params={"c": 2.0, "d":0.01}

    TestingTheClass = TestClass(**params)
    NewCalcA = TestingTheClass.CalcA()
    NewCalcB = TestingTheClass.CalcB()

    print(NewCalcA) #0
    print(NewCalcB) #0.02

现在,默认情况下,您的值为0,并且您只能使用与您相关的值填充dict。

请澄清:您需要做什么?您已成功地将加法中的
a、b
删除,将乘法中的
c、d
删除。函数中有许多可选参数(默认值)的行引用,所以您应该知道如何为
\uuuu init\uuuu
执行此操作。你哪里有问题?请你澄清一下问题,因为目前代码运行,没有任何问题,而且你的问题不清楚你在问什么。@Prune,代码运行得很好。但我想做的是,例如,我只有a和b,不想定义c和d,反之亦然。但我的代码必须定义所有4个变量。我怎样才能更灵活地为函数提供所需的变量?@Professor_Joykill,请看我对Prune的回答。@MCM我相信你可以在方法中添加参数,从而重用变量名,例如只定义a&b,运行
CalcA(a,b)
然后重新定义a&b并运行
CalcB(a,b)
是的,非常感谢。我在寻找这样的东西:)。是的,这也会有所帮助,但更多的是K.Kirsz定义的方式。不过,谢谢。