这更多的是一个理论问题,与实际问题无关
考虑到你有一些职业:
class A():
pass
a = A()
type(a)
# <class '__main__.A'>
有可能实现这样的东西吗
from random import randint
class Randomized(type):
def __new__(cls, name, bases, attrs):
attrs['__qualname__'] += str(randint(0, 99))
return super(Randomized, cls).__new__(cls, name, bases, attrs)
class A(metaclass=Randomized):
pass
a = A()
b = A()
# as I was thinking:
type(a)
# <class '__main__.A75'>
type(b)
# <class '__main__.A23'>
上面的示例并不像我预期的那样工作,因为Randomized.__new__
似乎只调用了一次:
a = A()
b = A()
type(a)
# <class '__main__.A66'>
type(b)
# <class '__main__.A66'>
您应该将
__new__
放在A
类中以实现所需的行为。例如:元类中的
__new__
在类A
创建时被调用,但在创建它的实例时不会像您所期望的那样被调用相关问题 更多 >
编程相关推荐