有没有什么很酷的方式在Python类中表达“if x is None: x = self.x”?

问题描述 投票:0回答:2

我正在学习 python OOP,并且真的很困惑何时使用

self
和不使用。

特别是当我想要创建一个默认获取对象实例输入的方法,并且还想让它作为可以获取自定义参数输入的普通方法时, 对于该方法的所有参数,我有点麻烦地输入

if x is None: x = self.x

示例如下。

from dataclasses import dataclass

@dataclass
class PlusCalculator():
    x: int = 1
    y: int = 2
    result: int = None
    
    def plus(self, x=None, y=None):
        if x is None: x = self.x    ## the bothersome part
        if y is None: y = self.y
        
        result = x + y
        self.result = result        ## also confusing...is it good way?
        
        return result
    
pc = PlusCalculator()
print(pc.plus())
print(pc.plus(4,5))

有什么好的方法可以使用实例变量作为函数参数的默认值吗??

python class oop default-value instance-variables
2个回答
0
投票

条件表达式可读、快速且直观 -

x = self.x if x is None else x

回复:

有什么好的方法可以使用实例变量作为函数参数的默认值吗??

关于

self.result
的设置 - 应该避免这种情况,除非您稍后需要将其作为实例 prop 访问。因此,您可以将其简化为:

@dataclass
class PlusCalculator():
    ...

    def plus(self, x=None, y=None):
        x = self.x if x is None else x
        y = self.y if y is None else y
        return x + y
        

0
投票

您可以将“x=1, y=2”设置为默认值,然后不需要检查它是否为None。 示例:

class PlusCalculator():
    x: int = 1
    y: int = 2
    result: int = None
    
    def plus(self, x=1, y=2):
        self.result = x + y
        return x + y
    
pc = PlusCalculator()
print(pc.plus())
print(pc.plus(4,5))
print(pc.plus(5))
print(pc.plus(y=5))

结果:

3
9
7
6
© www.soinside.com 2019 - 2024. All rights reserved.