【发布时间】:2021-12-29 04:56:56
【问题描述】:
我在 python 中编写了以下基本静态类:
from abc import ABC,abstractmethod
import typing
from main_module import utils
class BaseCLS(ABC):
credentials = None # <--- I want to set this var
def __init_session(caller) -> None:
credentials = utils.get_creds() # <--- not the right var
@staticmethod
@__init_session
def process(path: str) -> None:
raise NotImplementedError
每次调用process 时,装饰器都会触发基类私有方法__init_session。我正在尝试从私有方法中设置 credentials 类变量,但没有成功。我怎样才能实现我的目标?
【问题讨论】:
-
除了简单的
BaseCLS.credentials = ...之外,我看不出你怎么能做到这一点,因为你使用的是 static 方法,它既不能访问实例也不能访问上课…… -
谢谢,但我收到一个错误 NameError: name 'BaseCLS' is not defined
-
Err,真的,因为装饰器在类存在之前运行......然后我看到它可以按原样工作的选项更少。这个设计中的某些东西必须给予,目前还不清楚可以在这里给予什么。
-
这不是装饰器的工作方式。
@__init_session不会在每次调用process时调用__init_session。它在定义process时调用__init_session一次,并将process本身作为单个参数传递给__init_session。您应该阅读装饰器语义和技术。此外,静态方法和类变量的使用似乎很奇怪,尤其是在似乎打算成为抽象类的情况下。 -
另外,“基本静态类”没有意义。我不知道您试图按顺序使用这些词来表达什么意思,但是 Python 中没有“静态类”或“基本静态类”之类的东西。
标签: python static abstract-class private base-class