【发布时间】:2013-06-13 06:45:14
【问题描述】:
我想要的是以下内容:
lst = []
class Awesome:
"""This is my magical super class."""
...
class Inherits(Awesome):
"""Awesome does awesome stuff with Inherits."""
name = "Stack"
class InheritsAgain(Awesome):
name = "Overflow"
print(lst)
#: ['Stack', 'Overflow']
所以基本上,当定义 Inherits 和 InheritsAgain 类时,因为它们
从Awesome 继承,Awesome 有一些元类魔法(或其他),读取
来自继承类的属性name,并将其附加到lst。
我查看了 Python 中的元类,但我不确定它们究竟如何组合在一起。
这在 Python 中可行吗?如果是,你会怎么做?
编辑:
让我们添加到上面的示例中,这样它也可以工作:
class AndAgain(Awesome):
name = "/root/path/<name>/<id>"
def go():
pass
我希望定义整个类AndAgain,这样我可以检查并看到name 存在,其值为"/root/path/<name>/<id>",并且函数go() 也存在。
【问题讨论】:
-
我觉得有必要说让一个类依赖/操作一个全局变量是不可移植的,如果你的项目变得太大可能会让人困惑。
-
这比我最初想象的要复杂。你确定你必须那样做吗?这不能是XY Problem 的一个实例吗?
-
全局变量只是一个例子。 ;-) 我希望你不要以为我真的会像我那样为我的课程命名。实际应用程序是一种自动添加 REST API 端点的方法。如果我不必总是写
api.add_resource(ClassName, "/location"),那会很好。
标签: python-3.x metaprogramming