我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中的type,元类,类,对象用法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中的type,元类,类,对象用法

type,元类,类,对象

简单描述

1.type是python内建元类,新建的元类需要继承type

2.元类用来创建类,类用来创建对象

类的生成方式

传统定义通过声明关键字class

#1.创建Person类
#2.继承object
#3.拥有属性eat
class Person(object):
    def eat(self,food="rice"):
        print("eat %s"%food)
p = Person()
p.eat(food="fruits")

通过type生成

注:该方法一般很少用,一般先由type生成元类,再有元类生成类,由类衍生出对象实例

def eat(self,food="rice"):
    print("eat %s"%food)
People = type("People",(object,),{"eat":eat})
#People = type("People",(object,),dict(eat=eat))
p = People()
p.eat()

元类

一般来说元类均被命名为以MetaClass为后缀,元类是由type衍生出来,所以需继承type,元类的操作都在new方法中完成,new方法在init方法之前调用

示例一 

#方式1,使用lambda匿名函数
class LanguageMetaClass(type):
    def __new__(cls, name, bases, attrs):
        attrs['speak'] = lambda self:print(self.language)
        return type.__new__(cls,name,bases,attrs)
#方式2,使用预定义的函数
def speak(self):
    print("speak %s"%self.language)
#创建元类LanguageMetaClass
class LanguageMetaClass(type):
    def __new__(cls, name, bases, attrs):
        attrs['speak'] = speak
        #return type.__new__(cls,name,bases,attrs)
        return super(LanguageMetaClass,cls).__new__(cls.name,bases,attrs)
#使用创建好的元类创建类(python2.x与3.x方式不一致)
#python2.x
#默认新式类由type()构造,当在类中定义了__metaclass__则由其构建,__metaclass__查找顺序:
#1.查找自身的__metaclass__属性
#2.如果有父类,查找父类的__metaclass__(通过父类.__class__属性获取)
#3.如果没有父类,查找模块中的__metaclass__
class People(object):
    __metaclass__ = LanguageMetaClass   
    def __init__(self,language="chinese"):
        self.language = language
#python3.x
#默认新式类由type()构造,可以通过指定metaclass关键字参数后,则由metaclass构造
class People(object,metaclass=LanguageMetaClass):   
    def __init__(self,language="chinese"):
        self.language = language
p1 = People(language="English")
p1.speak()    #speak English
p2 = People()
p2.speak()    #speak chinese

示例二 

#创建元类AddMetaClass
class AddMetaClass(type):
    def __new__(cls,name,bases,attrs):
        attrs['add'] = lambda self,value:self.append(value)
        return type.__new__(cls,name,bases,attrs)
#python2.x
class MyList(list):    #MyLIST在list的基础上多了个add方法
    __metaclass__ = AddMetaClass
    pass
    
#python3.x
class MyList(list,metaclass=AddMetaClass):    #MyLIST在list的基础上多了个add方法
    pass
list1 =MyList()
list1.add(1)
print(list1)    #[1]
list1.add(2)
print(list1)    #[1,2]

元类type学习总结

type是元类,也就是python中所有的类其实本质上都是type这个类的实例化后的对象。

type的作用是干什么呢?

1、我们直接type()来判断一个对象的类型

type不是一个类吗?为什么可以直接去调用呢?因为type类其实也是一个对象,是自己的类的对象,而type类中实现了__cal__()这个方法,我们知道只要实现了__cal__()这个方法的类,那么该类实例化的对象就可以直接被调用,也就是可调用对象,即callable。

下面给个例子:

print(type(1))
print(type('abc'))
print(type([]))

运行结果:

<class 'int'>
<class 'str'>
<class 'list'>

其实判断一个对象的类型,还可以通过isinstance()来判断。

print(isinstance((),tuple))
print(isinstance('abc',str))
print(isinstance([],list))

运行结果:

True
True
True

2、type的第二个作用就是:创建类

其实这个不常用,一般我们都是使用class去调用,而不是使用type;

比如像下面这种:

type("Foo", (object,), {"a":1})

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中的type,元类,类,对象用法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python的type()函数:获取对象的类型

Python的type()函数:获取对象的类型,需要具体代码示例在Python中,我们经常需要知道一个对象的类型,以便在程序中进行相应的处理。Python提供了type()函数来获取对象的类型。本文将介绍type()函数的使用方法,并给出具
Python的type()函数:获取对象的类型
2023-11-18

Python中type的使用和元类的理解

“元类就是深度的魔法,99%的用户应该根本不必为此操心。如果你想搞清楚究竟是否需要用到元类,那么你就不需要它。那些实际用到元类的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用元类。”                     
2023-01-31

python中的类型和对象

type 类继承object类,由type自己实例化而来object由type类实例化而来,object没有基类list类有type类实例化来,继承自object类mylist由list类实例化而来,不继承任何类type(list)查看li
2023-01-31

python中面向对象_类_对象的概念与

1. 面向对象的概念,面向对象是一种编程思想。是对现实世界中一类事物的抽象,在编程中可以理解为是一种建立现实世界事物的模型  2.  面向对象和面向过程的区别:面向过程关注的是完成工作的步骤。面向对象关注的是谁能完成工作。面向对象是在完成工
2023-01-30

Python 对象中的数据类型

对于python,一切事物都是对象,程序中存储的所有数据都是对象,对象基于类创建 计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。 class 指自定义类型,type 指
2022-06-04

Python类的对象方法有哪些

这篇文章主要讲解了“Python类的对象方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python类的对象方法有哪些”吧!今天看了一下装饰器 classmethod和staticm
2023-06-02

Python中 type类有什么用

这篇文章将为大家详细讲解有关Python中 type类有什么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在单纯的Python type类的世界中,一切都是对象.这些对象可以分为三类,me
2023-06-17

python 面向对象之类方法

类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量举个例子classDog(object):def__init__(self,name):self.name=name@class
2023-01-30

Python类和对象怎么用

小编给大家分享一下Python类和对象怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!类  说是要“找对象”,我们第一个看的却是个叫作“类”的语法结构。这里的
2023-06-04

python中的元类

目录 元类 什么是元类 自定义元类 其他 元类什么是元类我们创建一个类目的是为了创建该类的实例对象,而元类就是用来创建类的
2023-01-30

Python面向对象的类和对象怎么使用

这篇文章主要介绍“Python面向对象的类和对象怎么使用”,在日常操作中,相信很多人在Python面向对象的类和对象怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python面向对象的类和对象怎么使用
2023-06-22

Python面向对象中类和对象的示例分析

这篇文章主要介绍了Python面向对象中类和对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是面向对象编程?我们是不是听过面向过程,拿来放在一起对比就比较好理
2023-06-22

C++类和对象中友元函数怎么使用

这篇文章主要介绍“C++类和对象中友元函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++类和对象中友元函数怎么使用”文章能帮助大家解决问题。友元用到关键字 friend浅解概念举一个非
2023-07-02

python中有哪些对象类型

python中有哪些对象类型?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而
2023-06-14

全面了解python中的类,对象,方法,属性

python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象。。。。。。 我们通过描述属性(特征)和行为来描述一个对象的。比如家里的小狗,它的颜色,大小,年龄,体重等是它的属性或
2022-06-04

学习python类方法与对象方法

本文实例针对python的类方法与对象方法进行学习研究,具体内容如下class Test_Demo:TEST = 'test_value'def __init__(self,name,age):self.name = nameself.ag
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录