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

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


相关推荐

  • 简单的制作一个钓鱼网页游戏_简单网页制作代码

    简单的制作一个钓鱼网页游戏_简单网页制作代码网络钓鱼,一个价值很高的词语!如果你曾读过我的一篇文章《价值30亿美元的资料被窃取,网络钓鱼到底有多可怕!》就会知道,网络钓鱼到底有多”值钱”!如果对网络钓鱼这个词进行解释的话,简而言之,其就是一种黑客手段,或者是一种通过假装自己是受信任的实体来欺骗他人来获取凭据(账号、密码等信息)的方法。讲白话,都能听懂的就是去仿作一个和正规网站一样的登录页面,欺骗用户进行输入从而达到获取信息的目的!…

    2022年8月24日
    4
  • Eclipse汉化教程2021新版

    Eclipse汉化教程2021新版Eclipse汉化教程Eclipse汉化教程确定Eclipse的版本方法一:打开eclipse,在启动画面中可以看到eclipse的版本名称(我的版本是2021-6),记住这个版本的名称;方法二:在Eclipse启动后,点击菜单栏中的Help(帮助)>>AboutEclipse(关于EclipseIDE)会弹出的AboutEclipse窗口,在这里也可以找到当前Eclipse的版本名称和版本号(Photon4.8.0);下载汉化包1.到Eclipse的官网上下

    2022年6月5日
    67
  • js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]

    js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]参考:https://www.cnblogs.com/ayaa/p/14732349.htmljs给数组添加数据的方式有以下几种:直接利用数组下标赋值来增加(数组的下标起始值是0)例,先存在一个有3个数据的数组:letarr=[1,2,3];console.log(arr);  此时输出的结果是[1,2,3]letarr=[1,2,3];arr[3]=5;console.log(arr);  此时的输出结果是[1,2,3,5];通过数组名[数组名.le.

    2022年6月11日
    236
  • Docker 容器网络访问原理,SNAT和DNAT

    Docker 容器网络访问原理,SNAT和DNAT1 容器网络访问原理图 2 网络访问的过程图 4 DOCKERSNAT 与 DNAT5 容器访问外部实现 6 外部访问容器实现

    2025年6月28日
    1
  • excel vba 解密

    excel vba 解密PrivateSubVBAPassword()’你要解保护的Excel文件路径Filename=Application.GetOpenFilename(“Excel文件(*.xls&*.xla&*.xlt),*.xls;*.xla;*.xlt”,,”VBA激活成功教程”)IfDir(Filename)=””ThenMsgBox”没找到相关文件,清重新设置。”

    2022年6月28日
    46
  • android rootfs的挂载流程[通俗易懂]

    android rootfs的挂载流程[通俗易懂]一、ramdisk的制作out/host/linux-x86/bin/mkbootfsout/target/product//root|out/host/linux-x86/bin/minigzip>out/target/product//ramdisk.img上述命令分两步进行:1.out/host/linux-x86/bin/mkbootfsout/target/prod

    2022年10月6日
    0

发表回复

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

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