189 8069 5689

python函数创建类 python类创建一个对象

python函数里定义的类

#Python 2.5

在大通等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站设计 网站设计制作定制网站建设,公司网站建设,企业网站建设,高端网站设计,全网营销推广,成都外贸网站建设,大通网站建设费用合理。

#这个可以用修饰器来完成

#但是一般不会限制参数类型

#给你个思路:

def argfilter(*types):

def deco(func): #这是修饰器

def newfunc(*args): #新的函数

if len(types)==len(args):

correct = True

for i in range(len(args)):

if not isinstance(args[i], types[i]): #判断类型

correct = False

if correct:

return func(*args) #返回原函数值

else:

raise TypeError

else:

raise TypeError

return newfunc #由修饰器返回新的函数

return deco #返回作为修饰器的函数

@argfilter(int, str) #指定参数类型

def func(i, s): #定义被修饰的函数

print i, s

#之后你想限制类型的话, 就这样:

#@argfilter(第一个参数的类名, 第二个参数的类名, ..., 第N个参数的类名)

#def yourfunc(第一个参数, 第一个参数, ..., 第N个参数):

# ...

#

#相当于:

#def yourfunc(第一个参数, 第一个参数, ..., 第N个参数):

# ...

#yourfunc = argfilter(第一个参数的类名, 第二个参数的类名, ..., 第N个参数的类名)(yourfunc)

Python-类的创建和使用

创建一个宠物 Pet 类,根据该类创建的每个实例都将存储名字和物种,赋予每个宠物吃饭(eat())和睡觉(sleep())的能力:

根据类创建实例

调用方法

给上面的例子进行补充,设置一个宠物到家的初始时间默认值为 0,对某个属性设定默认值可以不提供形参。

调用一下read_time()

增加一个 update_time() 的方法,指定初始时间

调用

新增一个 increment_time() 方法,表示较初始值而言增加的时间

调用

一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

创建一个 Cat 类,继承 Pet 的属性,同时可以定义 Cat 特有的属性。

调用

如果子类中的某些属性与父类不一样,可以在子类新建方法重新定义来改写父类。

类的导入和函数的导入相同。

核心解密Python函数在(类与函数之间)和(类与类之间)互相调用

首先来看一个函数间的调用

类方法:

执行结果:

metaclass能有什么用处,先来个感性的认识:

1.1 在wiki上面,metaclass是这样定义的:In object-oriented programming,

a metaclass is a class whose instances are classes.

Just as an ordinary class defines the behavior of certain objects,

a metaclass defines the behavior of certain classes and their instances.

也就是说metaclass的实例化结果是类,而class实例化的结果是instance。我是这么理解的:

metaclass是类似创建类的模板,所有的类都是通过他来create的(调用 new ),这使得你可以自由的控制

创建类的那个过程,实现你所需要的功能。

当然你也可以用函数的方式(下文会讲)

4.1 用类的形式

4.1.1 类继承于type, 例如: class Meta(type):pass

4.1.2 将需要使用metaclass来构建class的类的 metaclass 属性(不需要显示声明,直接有的了)赋值为Meta(继承于type的类)

4.2 用函数的形式

4.2.1 构建一个函数,例如叫metaclass_new, 需要3个参数:name, bases, attrs,

name: 类的名字

bases: 基类,通常是tuple类型

attrs: dict类型,就是类的属性或者函数

4.2.2 将需要使用metaclass来构建class的类的 metaclass 属性(不需要显示声明,直接有的了)赋值为函数metaclas_new

5.1 basic

metaclass的原理其实是这样的:当定义好类之后,创建类的时候其实是调用了type的 new 方法为这个类分配内存空间,创建

好了之后再调用type的 init 方法初始化(做一些赋值等)。所以metaclass的所有magic其实就在于这个 new 方法里面了。

说说这个方法: new (cls, name, bases, attrs)

cls: 将要创建的类,类似与self,但是self指向的是instance,而这里cls指向的是class

name: 类的名字,也就是我们通常用类名. name 获取的。

bases: 基类

attrs: 属性的dict。dict的内容可以是变量(类属性),也可以是函数(类方法)。

所以在创建类的过程,我们可以在这个函数里面修改name,bases,attrs的值来自由的达到我们的功能。这里常用的配合方法是

getattr和setattr(just an advice)

下面实现python中在一个类中调用另一个类的函数方法

或者下面来一个号理解的例子

执行结果:

先来介绍内部类与外部类是什么?

看源码解析:

内部类调用外部类的类属性和类方法

参考文献1

参考文献2

参考文献3


分享名称:python函数创建类 python类创建一个对象
URL分享:http://cdxtjz.com/article/doeojjj.html

其他资讯