gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:39:14 25 4
gpt4 key购买 nike

这里的问题非常简单,但我是 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

关于python - 在python中将类返回给自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60640075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com