gpt4 book ai didi

python - 是否可以在没有 @staticmethod 属性的方法内运行 print() ?

转载 作者:行者123 更新时间:2023-12-01 04:03:17 25 4
gpt4 key购买 nike

我有 .NET 和 Javascript 背景,并且正在努力学习 Python(针对 Raspberry Pi)。
现在我正在尝试弄清楚Python 中的OOP 以及方法和类的使用。但是 @staticmethod 有一点问题

class Car(object):
"""description of class"""

def __init__(self, make, model):
self.make = make
self.model = model

@staticmethod
def makeFirstNoise():
print("Vrooooommm!")

def makeSecondNoise():
print("Mweeeeeeeeeh!")

这就是我实现类并尝试运行这两种方法的方式。

from Car import Car

mustang = Car('Ford', 'Mustang')
mustang.makeFirstNoise()
mustang.makeSecondNoise()

这是输出:

Vrooooommm!
Traceback (most recent call last):
File "D:\Dev\T\PythonHelloWorld\PythonHelloWorld\PythonHelloWorld.py", line 5, in <module>
mustang.makeSecondNoise()
TypeError: makeSecondNoise() takes 0 positional arguments but 1 was given

那么问题来了,为什么我不能在没有 staticmethod 属性的情况下执行第二个方法?如果我像这样直接返回文本,这似乎可行:

def makeSecondNoise():
return "Mweeeeeeeh!"

print(mustang.makeSecondNoise())

最佳答案

makeSecondNoise 导致错误的原因是它自动传递一个参数 self,因为它没有声明为 staticmethodself 是调用该函数的类的实例。这最终导致了错误,因为 makeSecondNoise 未编码为接受任何参数;就像这样做:

def something():
...
something("Foo")

以下是 self 工作原理的示例:

>>> class Car:
... def makenoise(self):
... print(self)
...
>>> mustang = Car()
>>> mustang.makenoise()
<__main__.Car object at 0x0000000005498B38> # We can see that "self" is a reference to "mustang"

您的问题与 print 无关(如果没有 print 我也无法让您的示例工作) - 它与 自动传递有关> self 论证。

关于python - 是否可以在没有 @staticmethod 属性的方法内运行 print() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36125536/

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