如何在python的静态方法中访问构造函数?

问题描述

我正在尝试访问 staticmethod 内的类实例,但我在这样做时遇到了困难。这是我的课:

class Worker:
    def __init__(self,ch,method,properties,body):
        self.ch = ch
        self.method = method
        self.properties = properties
        self.body = body

    @staticmethod
    def receive_payload_and_validate_schema(body):
        # some logic

        return body

    @staticmethod
    def some_func(id_info,partner_params):
        id_response = {}
        # some logic
        self.ch.basic_ack(delivery_tag=self.method.delivery_tag) # This is where the problem is

        return id_response

    @staticmethod
    def another_func(body):
        id_info = {} # assume it contains keys and values
        partner_params = {} # assume it contains keys and values
        # some logic
        return Worker.some_func(id_info,partner_params)

如何在 self.ch.basic_ack(delivery_tag=self.method.delivery_tag) 静态方法中使用此表达式 some_func

解决方法

根据定义,静态方法与类的实例无关。 some_func 不应该是静态的,或者 ch 也应该是静态的。

,

您不能使用静态方法。在您的代码中,您是引用 self,它永远不会传递给静态方法。

self.ch.basic_ack(delivery_tag=self.method.delivery_tag)

在 Python OOP 中,当调用标准方法时,调用该方法的对象作为第一个参数传递。传统上这称为 self。在上面的行中,您使用的是 self,但它没有引用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...