python 元类编程_Python进阶

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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/165823.html原文链接:https://javaforall.net

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


相关推荐

  • 内核态和用户态的区别[通俗易懂]

    内核态和用户态的区别[通俗易懂]当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序…

    2022年9月17日
    2
  • 梯度下降学习率的设定策略

    梯度下降学习率的设定策略发现一篇写的很好的关于学习率的文章本文转载自卢明冬的博客-梯度下降学习率的设定策略1.学习率的重要性1)学习率设置太小,需要花费过多的时间来收敛2)学习率设置较大,在最小值附近震荡却无法收敛到最小值3)进入局部极值点就收敛,没有真正找到的最优解4)停在鞍点处,不能够在另一维度继续下降梯度下降算法有两个重要的控制因子:一个是步长,由学习率控制;一个是方向,由梯度指定。2.学习率的设定…

    2022年5月2日
    77
  • STM32F103芯片手册带寄存器定义链接[通俗易懂]

    STM32F103芯片手册带寄存器定义链接[通俗易懂]STM32F1中文参考手册_V10-豆丁网(docin.com)

    2022年10月15日
    2
  • 基于AX88796B的网络接口模块的设计与实现[通俗易懂]

    基于AX88796B的网络接口模块的设计与实现[通俗易懂] 基于AX88796B的网络接口模块的设计与实现[日期:2008-7-22]来源:今日电子/21IC 作者:重庆邮电大学崔巍[字体:大中小]  引言网络技术应用日益普及的今天,工业现场的仪器仪表、数据采集和控制设备也日趋网络化,工业自动化和网络的结合越来越密切。而将以太网和嵌入式系统相结合应用于工业控制中已成为趋势。AX8

    2022年6月10日
    33
  • 某些软件点击导出时出现NavigationCancelled错误解决方法

    某些软件点击导出时出现NavigationCancelled错误解决方法原因一般是由于http页面跳转到https页面或者反之的情形造成IE浏览器判定为安全隐患,所以终止打开页面。解决方法:1.打开Internet属性窗口,可以由以下三种方法打开。三种方法任选其一a)打开IE浏览器,点击“工具”或者右侧齿轮图标,选中“Internet选项”b)运行中,输入“inetcpl.cpl”,回车,如下图c)在控制面板中,选中“Internet选…

    2022年7月26日
    6
  • 最长递增子序列详解(longest increasing subsequence)

    最长递增子序列详解(longest increasing subsequence)一个各公司都喜欢拿来做面试笔试题的经典动态规划问题,互联网上也有很多文章对该问题进行讨论,但是我觉得对该问题的最关键的地方,这些讨论似乎都解释的不很清楚,让人心中不快,所以自己想彻底的搞一搞这个问题,希望能够将这个问题的细节之处都能够说清楚。对于动态规划问题,往往存在递推解决

    2022年5月1日
    43

发表回复

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

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