您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

内置关键字类型是指python中的函数还是类?

内置关键字类型是指python中的函数还是类?

type之所以称为“元类”,是因为它是产生其他类(AKA类型)的类。它的行为就像普通的类。特别是,它等效__new__于Python中看起来像这样的方法

class type(object):

    def __new__(cls, *args):
        num_args = len(args)

        if num_args not in (1, 3):
            raise TypeError('type() takes 1 or 3 arguments')

        # type(x)
        if num_args == 1:
            return args[0].__class__

        # type(name, bases, dict)
        name, bases, attributes = args
        bases = bases or (object,)

        class Type(*bases):
            pass

        Type.__name__ = name

        qualpath = Type.__qualname__.rsplit('.', 1)[0]
        Type.__qualname__ = '.'.join((qualpath, name))

        for name, value in attributes.items():
            setattr(Type, name, value)

        return Type

Class = type('Class', (), {'i': 1})
instance = Class()

print(type(instance))  # -> Class
print(instance.__class__)  # -> Class
print(type(type(instance)))  # -> type
print(Class.i)  # -> 1
print(instance.i)  # -> 1

请注意,在实例化一个类时,新实例的值是从返回的值__new__。对于type__new__始终返回类型对象(AKA类)。这是一个扩展int-1用作认值而不是的类的示例0

def Int__new__(cls, *args):
    if not args:
        return cls(-1)
    return super(cls, cls).__new__(cls, *args)

Int = type('Int', (int,), {'__new__': Int__new__})

i = Int()
print(type(i))  # -> Int
print(i.__class__)  # -> Int
print(type(type(i)))  # -> type
print(i)  # -> -1

j = Int(1)
print(j)  # -> 1

要真正了解其type工作原理,请看中的C代码type_new。您可以看到(向下滚动几行)这type(x)是一种特殊情况,可以立即返回类型(AKA类)x。完成后type(name, bases, dict),将调用类型创建机制。

要获得更多乐趣,请尝试以下操作:

type(object)
type(type)
isinstance(object, object)
isinstance(type, object)
type(1)
type(type(1))
python 2022/1/1 18:43:10 有292人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶