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

标签 python oop

我定义了一个有参数的对象。然后我创建了 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

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

最佳答案

您需要返回 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() 可能会也可能不会执行您想要的操作,您的代码无效,所以我只是猜测,但它不太相关)

关于python - 如何在对象上应用连续的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62627783/

相关文章:

javascript - 在 jQuery 按钮回调中获取正确的 "this"

java - java.util 中的模块(集合)

python - Windows 上的 RuntimeError 试图运行一个简单的程序

python - 在 qsub 中运行 python 脚本

python - Pandas :只保留前 n 个值并将其他值设置为 0

python - 我可以在 python 中为 tempfile.NamedTemporaryFile 设置 umask 吗?

python - python扭曲中的循环调用不起作用

oop - 说明类层次结构的图表称为什么?

php - MVC 面向对象技术 - 如何最小化查询并保持灵活性?

design-patterns - 如何解决像 "design a vending machine"这样的设计问题