在最近的一个项目中,我尝试做这样的事情(更复杂,但结果相同):
class MetaA(type):
def __new__(cls, name, args, kwargs):
print kwargs["foo"]
return type.__new__(cls, name, args, kwargs)
class A(object):
__metaclass__ = MetaA
foo = "bar"
class B(A):
pass
我明白了:
bar
Traceback (most recent call last):
File "C:\Users\Thorstein\Desktop\test.py", line 10, in <module>
class B(A):
File "C:\Users\Thorstein\Desktop\test.py", line 3, in __new__
print kwargs["foo"]
KeyError: 'foo'
类属性不是继承的吗?如果是这样,在与上述类似的框架中是否有任何解决方法?
编辑:使用程序中的实际(简化)示例可能更容易理解我的意思..
class GameObjectMeta(type):
def __new__(cls, name, bases, attrs):
attrs["dark_color"] = darken(*attrs["color"])
return type.__new__(cls, name, bases, attrs)
class GameObject(object):
__metaclass__ = GameObjectMeta
color = (255,255,255) # RGB tuple
class Monster(GameObject):
pass
基本上,想要在基色上运行一个函数以使保存在类中的颜色更深(类的多个实例将需要相同的颜色,但会有更长的类层次结构)。我希望这会更有意义..