如何在对象上应用连续方法

2024-09-28 23:20:06 发布

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

我已经定义了一个对象,它将有一个参数。然后我创建了3种方法,如下所示:

  1. do_it1将在对象的值上加10
  2. do_it2将在对象的值上加20
  3. do_it3可以接受一个参数,那么它应该加上30加上它的输入参数。左边的那个。

这就是我所做的

class MyClass():

def __init__(self,object_value):
    self.object_value = object_value

def do_it1 (self):
    return self.object_value + 10

def do_it2 (self):
    return self.object_value + 20

def do_it3 (self,input_number):
    self.input_number = input_number
    return  + 30 + self.input_number

这是输出

MyClass(5).do_it1()

返回正确的15

MyClass(4).do_it2()

返回正确的24

MyClass(4).do_it2().do_it3(6)

返回AttributeError:“int”对象没有属性“do_it3” 而我预期的60是4+20+30+6

MyClass(1).do_it1().do_it2().do_it3(9)

返回AttributeError:“int”对象没有属性“do_it2” 而我期望的是1+10+20+30+9=70

如何在同一类中的方法之上应用方法


Tags: 对象方法selfnumberinput参数returnobject
3条回答

您需要返回self(或其副本,通过import copycopy.copy(self)或类似方式)才能使其工作。 应计值必须通过object_value属性访问

代码:

class MyClass():
    def __init__(self,object_value):
        self.object_value = object_value

    def do_it1(self):
        self.object_value += 10
        return self

    def do_it2(self):
        self.object_value += 20
        return self

    def do_it3(self, input_number):
        self.input_number = input_number
        self.object_value += 30 + self.input_number
        return self


MyClass(4).do_it2().do_it3(6).object_value
# 60
MyClass(1).do_it1().do_it2().do_it3(9).object_value
# 70

(方法do_it3()可能做也可能不做您想做的事情,您的代码无效,所以我只是猜测,但它不太相关)

在这个语句中,您调用init,它创建了一个MyClass self.object\u value=5的对象,然后调用它的do\u it1()

MyClass(5).do_it1()

在第二个示例中,您执行相同的操作,但是您创建了一个self.object_value=4的对象,然后调用.do_it2()

MyClass(4).do_it2()

在最后一个例子中,它返回一个错误,因为您创建了self.object_value=4的对象MyClass,然后调用do_it2(),它返回一个Int值,因此最终将得到Int.do_it3(6),这会引发一个错误,因为Int对象没有方法do_it(3)。MyClass(4).do_it2()的所有返回值都是int,然后调用的方法不是返回对象的方法

MyClass(4).do_it2().do_it3(6)

我希望这有帮助。如果你不明白,请告诉我

由于这些方法返回int,因此只能对其结果调用int方法

您的调用MyClass(4).do_it2().do_it3(6)相当于24.do_it3(6),这没有多大意义

相关问题 更多 >