繁体   English   中英

如何在没有实例的情况下调用同一类的另一个方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM