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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 史上超强最常用SQL语句大全

    史上超强最常用SQL语句大全史上超强最常用SQL语句大全,)1)DDL–数据定义语言用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等2)DML–数据操作语言用来对数据库中表的数据进行增删改。关键字:insert,delete,update等3)DQL–数据查询语言用来查询数据库中表的记录(数据)。关键字:selewhere等4)DCL–数据控制语言用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等

    2022年6月14日
    22
  • 达梦数据库备份还原使用

    达梦数据库备份还原使用达梦数据库备份还原使用一、关于备份二、物理备份三、逻辑备份一、关于备份1、备份的作用:①、防止误操作②、软硬件故障,做恢复③、防止天灾2、备份的方式:逻辑备份和物理备份3、备份的介质:磁盘,磁带,光盘支持第三方的备份软件:如上海爱数,鼎甲等。二、物理备份物理备份分为:冷备和热备冷备:DMAP服务是打开的,数据库实例是关闭的方式1:利用控制台工具去备2、DMRM…

    2022年5月14日
    54
  • jxls工具导出excel,报错:Cannot load XLS transformer. Please make sure a Transformer implementation is in cl[通俗易懂]

    jxls工具导出excel,报错:Cannot load XLS transformer. Please make sure a Transformer implementation is in cl[通俗易懂]jxls导出excel报错:“`javajava.lang.reflect.InvocationTargetException:nullatsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)~[na:1.8.0_101]atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0_101…

    2022年7月24日
    57
  • apache rewrite模块_怎么安装apache

    apache rewrite模块_怎么安装apache给apache安装mod_rewrite模块只是用来做参考,相关情况可跟据自己的需求进行修改如果你的服务器apache还没有安装,那很简单,在编译apache时将mod_rewrite模块编译进去就可以,相关文档可以在[url]www.gbunix.com[/url]中找到。如果你的apache已经安装好了,现在只想编译出mod_rewrite.so模块,在apache中进行加

    2022年9月21日
    4
  • 打赏图片,怎么在csdn上上传图片,并添加到自定义栏目中[通俗易懂]

    打赏图片,怎么在csdn上上传图片,并添加到自定义栏目中[通俗易懂]打赏图片,怎么在csdn上上传图片,并添加到自定义栏目中

    2022年4月23日
    32
  • ASCII码表查询

    ASCII码表查询ASCII码表查询

    2022年4月24日
    63

发表回复

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

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