gpt4 book ai didi

python - 从 Python 中的函数获取类引用

转载 作者:行者123 更新时间:2023-11-28 17:48:36 26 4
gpt4 key购买 nike

我正在编写一个 python (3.2+) 插件库,我想创建一个函数来创建一些从配置文件自动处理的变量。

用例如下(类变量):

class X:
option(y=0)
def __init__(self):
pass

(实例变量):

class Y:
def __init__(self):
option(y=0)

选项草案代码如下:

def option(**kwargs):
frame = inspect.stack()[1][0]
locals_ = frame.f_locals
if locals_ == frame.f_globals:
raise SyntaxError('option() can only be used in a class definition')

if '__module__' in locals_:
# TODO

else:
for name, value in kwargs.items():
if not name in locals_["self"].__class__.__dict__:
setattr(locals_["self"].__class__, name, VirtualOption('_'+name, static=False))
setattr(locals_["self"], '_'+name,value)

我有问题的第一种情况,当将选项声明为类变量时。是否有可能以某种方式获得对使用此函数的类的引用(例如对类 X)?

最佳答案

您无法获得对该类的引用,因为该类尚未创建。您的父框架指向一个临时函数,其 locals() 完成后将用作类主体。

因此,您需要做的就是将您的变量添加到父框架局部变量中,这些变量将在类构建完成时添加到类中。

简短演示:

>>> def foo():
... import sys
... flocals = sys._getframe(1).f_locals
... flocals['ham'] = 'eggs'
...
>>> class Bar:
... foo()
...
>>> dir(Bar)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__locals__', '__lt__', '__module__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'ham']
>>> Bar.ham
'eggs'

关于python - 从 Python 中的函数获取类引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14160686/

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