python 元类编程_python进阶路线图

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


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

通常我们创建类都是使用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类的所有方法和属性

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164941.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python去重函数_python去重的方法

    Python去重函数_python去重的方法栗子1:利用setL1=(1,1,2,2,3,3)print(set(L1))结果为:{1,2,3}栗子2:利用np.uniqueimportnumpyasnpL1=(1,1,2,2,3,3)print(np.unique(L1))结果为:[123]栗子3:利用循环importnumpyasnpL1…

    2022年11月1日
  • 矩阵求逆的快速算法[通俗易懂]

    矩阵求逆的快速算法[通俗易懂]                                                                                                  作者:龚敏敏算法介绍矩阵求逆在3D程序中很常见,主要应用于求Billboard矩阵。按照定义的计算方法乘法运算,严重影响了性能。在需要大量Billboard矩阵运算时,矩阵求逆的优化能极大提高性

    2022年11月2日
  • 组合数递推的计算方法 c语言,组合数公式的递推公式

    组合数递推的计算方法 c语言,组合数公式的递推公式组合数公式的递推公式:c(m,n)=c(m-1,n-1)+c(m-1,n)。等式左边表示从m个元素中选取n个元素,而等式右边表示这一个过程的另一种实现方法:任意选择m中的某个备选元素为特殊元素,从m中选n个元素可以由此特殊元素的被包含与否分成两类情况,即n个被选择元素包含了特殊元素和n个被选择元素不包含该特殊元素。前者相当于从m-1个元素中选出n-1个元素的组合,即c(m-1,n-1);后者相当于…

    2022年7月15日
  • 王者荣耀最低战力查询-王者战区修改[通俗易懂]

    王者荣耀最低战力查询-王者战区修改

    2022年2月21日
  • Extjs弹窗控件——Ext.MessageBox

    Extjs弹窗控件——Ext.MessageBox首先,浏览器自带的弹窗有alert、confirm、prompt等。js弹窗的3种方式:alert、confirm、prompt鉴于其外观丑陋以及配置不方便,我们常采用Extjs自带的弹窗控件。//

    2022年7月3日
  • SWD接口_swd调试接口定义

    SWD接口_swd调试接口定义SWD接口:我们比较常用的是Jlink下载器,这种下载器有一个缺点就是使用的Jtag20PIN接口,太多的PIN会导致一些小型的PCB板很拥挤,也会增加布线的难度。而使用SWD接口下载调试,只

    2022年8月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号