搜索
简帛阁>技术文章>python中的type,元类,类,对象用法

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})
目录type,对象简单描述的生成方式元类元类type学习总结type的作用是干什么呢?type,对象简单描述1typepython内建元,新建的需要继承type2用来
目录1、type动态创建11语法格式12案例1:使用type创建13案例2:使用type创建带有属性(方法)的14案例3:使用type动态创建一个继承指定前言:通常我们创建都是使用cl
pythontype和metaclasspython中一切皆对象,所以本身也是对象有创建对象的能力,那谁来创建的呢?答案是type。1用tpye函数创建一个classA(object)
言通常我们创建都是使用class名,但是小伙伴们有没有想过,是由谁来创建的呢,python中常说的万物皆对象,对象是由创建的,那本身也可以看做是对象可以由type创建type动态创
1引入Python中一切皆对象,所谓对象就是由创建出来,那么创建对象本身也是一个对象,也就是说创建对象本身也由别的什么创建,这种创建的类就叫元类2是谁?type函数就是,没错就是
回顾面向对象编程让我们先用30秒钟来回顾一下OOP到底是什么。在面向对象编程语言中,可以定义,它们的用途是将相关的数据和行为捆绑在一起。这些可以继承其父的部分或全部性质,但也可以定义自己的属性
关于的一些说明1什么是?在我们不自定义的前提下,元类指的就是type,而type实际上就是一个。2的作用?元类是用于创建某个,即说明了我要创建的是通过哪个创建的。3对创建
本节介绍一下Python中元的基本内容type:python3中所有的都是通过type创建出来的object:所有的顶级父类想说的话在注释中都添加了,想学习的可以看一下python中内置的
一、理解也是对象在大多数编程语言中,就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立:classObjectCreator(object):passmy_objectObj
什么叫元类?年轻人先不要在意这些细节、我们一步一步的来!001、oop的世界里有一句话“万物皆对象”classPerson(object):nameNoneif__name____main__:i12