python type error是什么意思_python – TypeError:type()需要1或3个参数

__new__方法在args中传递3个位置参数;类名,基类和类体. cls参数绑定到元类,所以MyMetaClass在这里.

您正在为该序列添加另一个名称;删除名称,或从args中删除第一个参数:

class MyMetaClass(type):

def __new__(cls, *args, **kwargs):

print('call __new__ from MyMetaClass.')

return type(*args, **kwargs)

要么

class MyMetaClass(type):

def __new__(cls, *args, **kwargs):

print('call __new__ from MyMetaClass.')

return type(cls.__name__, *args[1:], **kwargs)

然而,cls参数是元类对象,所以除非你想要所有的类都被称为MyMetaClass,否则我会坚持使用第一个选项.

These steps will have to be performed in the metaclass’s __new__() method – type.__new__() can then be called from this method to create a class with different properties. This example adds a new element to the class dictionary before creating the class:

06002

__new__() is a static method (special-cased so you need not declare it as such) that takes the class of which an instance was requested as its first argument. The remaining arguments are those passed to the object constructor expression (the call to the class).

请求实例的类是您的元类(生成类对象).

演示:

>>> class MyMetaClass(type):

... def __new__(cls, *args, **kwargs):

... print('call __new__ from MyMetaClass.')

... return type(*args, **kwargs)

...

>>> class Foo(object):

... __metaclass__ = MyMetaClass

...

call __new__ from MyMetaClass.

>>> Foo

>>> class MyMetaClass(type):

... def __new__(cls, *args, **kwargs):

... print('call __new__ from MyMetaClass.')

... return type(cls.__name__, *args[1:], **kwargs)

...

>>> class Foo(object):

... __metaclass__ = MyMetaClass

...

call __new__ from MyMetaClass.

>>> Foo

>>> # Note the ^^^^^^^^^^^^ class.__name__ attribute here

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值