• 技术文章 >Python技术 >Python基础教程

    type()函数如何创建python3中的类?

    小妮浅浅小妮浅浅2020-11-16 16:11:05原创1866
    相信结合之前函数的学习,小伙伴们对于函数的应用可以得心应手了。那么,结合我们最近所写的类,小编想看看有没有小伙伴知道type()函数是如何创建类的?当然了,我们之前讲的函数种类繁多,大家不一定对这个函数有印象,这点大家也不用太着急。小编接下来为大家进行讲解。


    当我们使用class定义类的时候,Python解释器仅仅是扫描一下定义的语法,然后调用type()函数创建class类。那为什么采取这种方式呢?先看一个例子:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    class A(object):

        # 类属性

        role = 'student'

      

        # 实例方法

        def __init__(self, name):

            # 实例属性

            self.name = name

      

        # 类方法

        @classmethod

        def study(cls):

            pass

      

        # 静态方法

        @staticmethod

        def cal_student_num():

            Pass

    上面我们使用class定义了A类对象,其中包含了类属性、类方法、实例属性、实例方法、静态方法。如果我们使用type()函数,如何创建呢?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    # 使用type()函数定义类

    # 实例方法

    def __init__(self, name):

        # 实例属性

        self.name = name

      

      

    # 类方法

    @classmethod

    def study(cls):

        pass

      

      

    # 静态方法

    @staticmethod

    def cal_student_num():

        pass

      

      

    # 元类作用不在于创建一个新的类

    A = type(

        'A',

        (object,),

        {

            'role': 'student',

            '__init__': __init__,

            'study': study,

            'cal_student_num': cal_student_num

    })

    仔细观察,使用type()函数创建class类的时候,只是将定义在class类内部的代码拿出来,放在外面,然后向type()函数传入三个参数namebasesdictname字符串类型,代表类名,比如例子中的"A"bases元组类型,代表基类(或父类),即需要继承的类对象;dict字典类型,将定义的类属性、类方法、实例方法等,以键值对的形式建立映射关系。

    当我们使用class定义对象的时候,解释器内部会帮我们调用type()函数,完成创建对象工作。为什么平时我们定义对象大多是采用class,而不采用type()函数呢?因为type()函数一点都不优美,看上去缺少整体性,代码不易读,写起来也很麻烦。

    专题推荐:python3类
    上一篇:python assert函数是什么以及如何使用? 下一篇:如何理解Python3中的子类和父类?

    相关文章推荐

    • python类可以继承吗• python类对象和实例对象是一样的吗• python类可以传递参数吗

    全部评论我要评论

    © 2021 Python学习网 苏ICP备16018502号-40

  • 取消发布评论
  • 

    Python学习网