python - 在python中将类返回给自身

这里的问题非常简单,但我是 python 作为一种面向对象的编程语言的新手。我正在尝试写一个类。想象一下它的组织如下:

class myClass:
    def __init__(self,a,b,runit=True):
        self.a = a
        self.b = b
        if runit:
            self.run_func()

    def run_func(self):
        self.c = self.a*self.b
        return

如您所见,该类仅使用 ab 进行了初始化。它默认从这些参数初始化 c,但它不需要。现在让我来说明三个我认为应该表现相同但实际上不同的用例:

# Use 1
test = myClass(5,2)
print(test.c)

# Use 2
test = myClass(5,2,runit=False)
test.run_func()
print(test.c)

# Use 3
test = myClass(5,2,runit=False).run_func()
print(test.c)

这将返回以下内容:

10
10
Traceback (most recent call last):

  File "<ipython-input-37-cb854baa3a0c>", line 23, in <module>
    print(test.c)

AttributeError: 'NoneType' object has no attribute 'c'

为什么不能立即对实例化的类进行操作并将此结果一步传递给test?在我看来,(1) 和 (2) 是同一组操作,只是一个分为两步,另一个在一行中完成。

而且,更重要的是,我如何通过编辑我的类使其以预期的方式运行来解决这个问题?

最佳答案

# Use 3 myClass(5,2,runit=False).run_func() 返回 None

修复你可以返回self:

def run_func(self):
        self.c = self.a*self.b
        return self

test = myClass(5,2,runit=False).run_func()
print(test.c)

输出:

10

或者您不应该将标志 runit 设置为 False 并使用:

class myClass:
    def __init__(self,a,b,runit=True):
        self.a = a
        self.b = b
        if runit:
            self.run_func()

    def run_func(self):
        self.c = self.a*self.b

test = myClass(5,2)
print(test.c)

输出:

10

https://stackoverflow.com/questions/60640075/

相关文章:

swift - 将核心数据同步到 CloudKit 公共(public)数据库

python - 如何在 asyncio create_task 中更新全局变量

javascript - YouTube 视频 API 片段标题包含 Next.js 中的特殊字符

session - Nuxt Apollo 具有用于基于 session 的身份验证的动态 head

javascript - 使用 JavaScript 检测按键持续时间

java - JUnit 测试方法无法返回值

visual-studio-code - 有一种方法可以在 vscode 中的 ` `(重音符)内语

javascript - 使用javascript在数组中首先缺少正整数?

python - 从包含文本格式数据的其他列创建 Pandas 数据框的列

firebase - 在 Firebase 云存储中加载预览时出错