[英]How can I call another method of the same class without an instance?
我直接在这样的类上调用方法:
MyClass.action("Hello World!")
在被调用的方法中,我需要引用另一个方法:
class MyClass:
def action(data):
print('first')
# vvv How to perform this call?
next_action(data)
def next_action(data):
print('second', data)
通常,我会使用self
来访问方法和属性,但是通过调用类上的方法,没有self
可以引用的实例。 在这种情况下,我如何仍能从另一种方法访问一种方法?
根据您的调用方式,您似乎正在尝试定义类方法。 为此包括@classmethod
装饰器。 然后它将类作为第一个参数传递,您可以使用它来调用它。
class MyClass:
@classmethod
def action(cls, data):
print('first')
cls.next_action(data)
@classmethod
def next_action(cls, data):
print('second', data)
MyClass.action('Hello World!')
实际上,如果您实际上是在尝试创建实例方法,那么您需要从实例中调用它们。 在这种情况下,您定义没有classmethod
装饰器的类并从实例中调用它。 然后,Python 会将对该实例的引用作为第一个参数传递。 但是您需要创建实例来调用它:
class MyClass:
def action(self, data):
print('first')
self.next_action(data)
def next_action(self, data):
print('second', data)
instance = MyClass()
instance.action('Hello World!')
您需要使用self
参数编写。
class MyClass:
def action(self, data):
print('first')
self.next_action(data)
def next_action(self, data):
print('second')
您需要从您的类中创建一个实例(对象)并调用它。
class MyClass:
def action(self):
print('first')
self.next_action()
def next_action(self):
print('second')
my = MyClass()
my.action()
然后你的方法总是将self
作为第一个参数,它引用对象本身。
您必须将 self 作为方法的第一个参数,如下所示:
class MyClass:
def action(self, data):
print('first')
self.next_action(data)
def next_action(self, data):
print('second')
而名称self
实际上只是一个命名约定,因此您可以将其更改为您想要的任何名称,它必须是第一个参数。 但我当然会建议你坚持下去。
由于这些是成员函数,因此将其作为实例 self 的成员函数调用。
def next_Action(self,data):
self.next_action(data)
传递作为对象引用的self
#!/usr/bin/env python3.10
class MyClass:
def action(self, data):
print('first')
self.next_action(data)
def next_action(self, data):
print('second')
if __name__ == "__main__":
myclass = MyClass()
myclass.action('hmmm')
如果您不希望它们成为实例方法,也可以使用@classmethod
装饰器将方法设为类方法
#!/usr/bin/env python3.10
class MyClass:
@classmethod
def action(cls, data):
print('first')
MyClass.next_action(data)
@classmethod
def next_action(cls, data):
print('second')
if __name__ == "__main__":
myclass = MyClass()
myclass.action('hmmm')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.