python之type

Posted yuyafeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之type相关的知识,希望对你有一定的参考价值。

先上代码

class Foo:
    pass

print(Foo,  type(Foo))
print(type, type(type))

‘‘‘
    <class ‘__main__.Foo‘> <class ‘type‘>
    <class ‘type‘> <class ‘type‘>

‘‘‘

Python中万物皆对象,所有用来创建对象的类,本身也对象,类是type类的对象

type类叫做元类,是所有元类的类

元类: 造类的类 -类的类

  -- 控制类的产生

  --控制类的对象的产生

在type的init方法中

def __init__(cls, what, bases=None, dict=None): # known special case of type.__init__
        """
        type(object_or_name, bases, dict)
        type(object) -> the object‘s type
        type(name, bases, dict) -> a new type
        # (copied from class doc)
        """
        pass
type(name, bases, dict) -> a new type
name为类的名字 ‘C‘
bases为继承的基类 (object,)
dict为名称空间
class Foo:
    pass


print(Foo, type(Foo))
C = type(C, (object,), )
print(C, type(C))
C.name = 123
print(C.name)
‘‘‘

  <class ‘__main__.Foo‘> <class ‘type‘>
  <class ‘__main__.C‘> <class ‘type‘>
  123

‘‘‘

由此可见使用type可以直接创建一个类

使用exec给类创建名称空间

s = ‘‘‘
my_a = 10
my_b = 20
def __init__(self, name):
    self.name = name
@classmethod
def print_msg(cls,msg):
    print(msg)
‘‘‘

dic = 
exec(s, , dic)

C = type(C, (object,), dic)
print(C, type(C))
print(C.__dict__)
# C() # 报错  __init__中带有一个参数
C(yyf)  # 不报错
C.print_msg(123)
‘‘‘

  <class ‘__main__.C‘> <class ‘type‘>
  ‘my_a‘: 10, ‘my_b‘: 20, ‘__init__‘: <function __init__ at 0x01AA0858>, ‘print_msg‘: <classmethod object at 0x01AD9950>, ‘__module__‘: ‘__main__‘, ‘__dict__‘: <att  ribute ‘__dict__‘ of ‘C‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘C‘ objects>, ‘__doc__‘: None
  123

‘‘‘

 

以上是关于python之type的主要内容,如果未能解决你的问题,请参考以下文章

layui之日期和时间组件

python之代码积累 100行

python之代码积累 100行

python之模块和包

Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property(代码片段

python之模块和包