zoukankan      html  css  js  c++  java
  • python进阶(19)使用元类type创建类

    前言

    通常我们创建类都是使用class 类名,但是小伙伴们有没有想过,类是由谁来创建的呢,python中常说的万物皆对象,对象是由类创建的,那类本身也可以看做是对象,类可以由元类type创建
     

    type动态创建类

    语法格式

    type(类名,由父类名称组成的元组(可以为空),包含属性的字典(名称和值))
     

    案例1:使用type创建类

    Person = type("Person", (), {})
    p = Person()
    print(type(p))
    print(Person.__name__)
    

    结果

    <class '__main__.Person'>
    Person
    

    注意:type("Person", (), {})中的Person可以写成其他任意字符串,但是打印类的名称时,就会变成你写其他字符串了

    Person = type("Per", (), {})
    p = Person()
    print(Person.__name__)
    

    结果

    Per
    

    所以为了程序代码更加友好,一般变量名和设置的类名保持统一
     

    案例2:使用type创建带有属性(方法)的类

    def show(self):
        print("展示自己")
    Person = type("Person", (), {"age": 18, "name": "jkc", "show": show})
    p = Person()
    print(p.age)
    print(p.name)
    p.show()
    

    结果

    18
    jkc
    展示自己
    

    我们动态创建了一个父类为Object,属性有age、name、方法为show的类
     

    案例3:使用type动态创建一个继承指定类的类

    class Animal:
        def __init__(self, color="blue"):
            self.color = color
    
        def eat(self):
            print("吃东西")
    Dog = type("Dog", (Animal, ), {})
    dog = Dog()
    dog.eat()
    print(dog.color)
    

    结果

    吃东西
    blue
    

    我们动态创建了一个继承Animal类的Dog类,可以使用Animal类的所有方法和属性

  • 相关阅读:
    拷贝构造函数与赋值函数的区别
    C++模板(一)
    拷贝构造函数
    memcpy函数
    malloc calloc 和 realloc
    extern关键字
    C中不安全函数
    缓冲区溢出问题
    C++引用
    背包问题专栏(01,完全,多重)
  • 原文地址:https://www.cnblogs.com/jiakecong/p/14717441.html
Copyright © 2011-2022 走看看