python中的类怎样理解_python中元类(metaclass)的理解

一:类也是对象

类就是一组用来描述如何生成一个对象的代码。

类也是一个对象,只要你使用关键字class,python解释器在执行的时候就会创建一个对象。

下面这段代码:

classObjectCreator(object):pass

会在内存中创建一个对象,名字就是ObjectCreator,这个对象(类)自身拥有创建对象(类实例)的能力。

类的本质是一个对象,你可以拷贝它,可以将它赋给一个变量,将它作为参数传递给函数,可以为它增加属性。

以下为实例:

classObjectCreator(object):pass

print(ObjectCreator) #打印一个类

defecho(data):print(data)

echo(ObjectCreator)#将类作为参数传递给函数

ObjectCreator.newAttribute= ‘new attr‘ #为类添加新属性

print(hasattr(ObjectCreator,‘newAttribute‘))print(ObjectCreator.newAttribute)

ObjectCreatorCopy= ObjectCreator #将类复制给一个变量

print(ObjectCreatorCopy)print(ObjectCreatorCopy())‘‘‘输出:

True

new attr

<__main__.ObjectCreator object at 0x0000000001EA9860>‘‘‘

二:动态的创建类

1 通过return class 动态的构建需要的类

类也是对象,所以我们再运行的时候动态的创建它们。在函数体中创建类:

defcreate_class(name):if name == ‘foo‘:classFoo(object):pass

returnFooelse:classBerry(object):pass

returnBerry

my_class= create_class(‘foo‘)print(my_class)#返回类

print(my_class())#返回类的实例

‘‘‘输出:

.Foo‘>

<__main__.create_class.

2 通过type函数构造类

上述方法需要你自己编写整个类的代码。由于类也是对象,所以也必须是通过什么东西来生成才对。

内置函数type可以让知道一个对象的类型是什么,like:

classDemo(object):pass

print(type(100))print(type(‘str‘))print(type(Demo))print(type(Demo()))‘‘‘输出:

‘‘‘

另外,type还可以动态的创建类。type可以接收一个类的描述作为参数,然后返回一个类。

type的语法:

type(类名,父类的元组(针对继承的情况,可以为空), 包含属性的字典(名称和值))

比如下面的代码:

classMyclassDemo(object):pass

#可以手动通过type创建

MyclassDemo= type(‘MyclassDemo‘,(),{}) #返回一个类对象

print(MyclassDemo)print(MyclassDemo())‘‘‘输出:

<__main__.MyclassDemo object at 0x000000000213A3C8>‘‘‘

下面通过一个例子看看type是如何创建类的:

#1 构建Foo类

classFoo(object):

bar=True#使用type构建

Foo = type(‘Foo‘, (), {‘bar‘: True})print(Foo)#2继承Foo类

classFooChild(Foo):pass

#使用type构建

FooChild = type(‘Foochild‘,(Foo,), {})print(FooChild)print(FooChild.bar)#3为FooChild类增加方法

defecho_bar(self):print(self.bar)

FooChild= type(‘FooChild‘,(Foo,),{‘echo_bar‘: echo_bar})print(hasattr(Foo,‘echo_bar‘))print(hasattr(FooChild, ‘echo_bar‘))

my_foo=FooChild()

my_foo.echo_bar()‘‘‘输出:

True

False

True

True‘‘‘

可以看到,在python中

原文地址:http://www.cnblogs.com/1zhangwenjing/p/7750620.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值