1、 类中的方法

在类里主要有三种方法:

a、普通方法:在普通方法定义的时候,需要一个对象的实例参数,从而在类中定义普通方法的时候,都必须传送一个参数self,那么这个参数也就是object

b、类方法:在类方法中,传递的参数为类也就是class,在一般使用中参数为cls

c、静态方法:无需任何参数,在静态方法中,仅仅是一个函数,在调用静态方法的时候,不需要传递任何参数即可使用

在类的三种方法中,普通方法和类方法都是绑定的方法,也就是在其中需要传递参数,普通方法传递为slef,类方法传递的为cls

在使用的时候,静态方法仅仅是逻辑上和class绑定在一起的,而类方法可以做动态的匹配,传递进去的是clas,也就是类

在语法上,静态方法需要使用装饰符@staticmethod,而类方法需要使用装饰符@classmethod

使用模块函数比使用静态方法更加常见。

#!/usr/bin/env python

class TestMethod(object):

def foo(self,x): #定义类中的普通函数,传递参数为self,也就是类的实例

print 'excuting foo(%s,%s)' % (self,x)

@staticmethod #定义静态方法,在其中不传递参数

def static_foo(x):

print 'excuting static_foo(%s)' % x

@classmethod #传递类方法,在其中传递的参数为cls

def class_foo(cls,x):

print 'excuting class_foo(%s,%s)' % (cls,x)

kel = TestMethod()

kel.foo(1)

kel.static_foo(1)

kel.class_foo(1)

TestMethod.static_foo(1)

TestMethod.class_foo(1)

print (kel.foo)

print (kel.static_foo)

print (kel.class_foo)执行结果如下:

[root@python 422]# python testMethod.py

excuting foo(<__main__.testmethod object at>,1) #参数为绑定的实例,也就是object

excuting static_foo(1) #静态方法没有其他参数

excuting class_foo(,1) #类方法使用的参数是类

excuting static_foo(1)

excuting class_foo(,1)

> #普通方法是绑定方法,使用的参数为self

> # 类方法也是绑定方法,使用的参数为cls

2、 类的特殊的属性

类中具有几种特殊属性,如下所示:

__name__,表示类的名字

__doc__,类的文档字符串

__bases__,类的所有父类构成的元组

__dict__,类的属性

__module__,类所在的模块

__class__,类多对用的类

在使用类的方法__init__方法中,此方法应该返回为None:

#!/usr/bin/env python

class Kel(object):

def __init__(self):

print 'this is the init method called'

return 1

kel = Kel()

在如上的代码中,在init方法中,返回了一个值为1

执行结果如下:

[root@python 422]# python testinitRetun.py

this is the init method called

Traceback (most recent call last):

File "testinitRetun.py", line 8, in

kel = Kel()

TypeError: __init__() should return None, not 'int'

也就是在init方法中,必须返回值为None。

3、 关于方法__init__

#!/usr/bin/env python

class Kel(object): #父类方法

def __init__(self):

print 'Kel class called'

class J(Kel):#J是继承Kel类

def __init__(self): #重写了init方法

print 'J class is called'

class M(Kel):#M继承Kel类

def __init__(self):#重写了init方法

super(M,self).__init__()#调用了父类的方法

print 'M class is called'

print '-'*10

kel = Kel()

print '-'*10

j = J()

print '-'*10

m = M()执行结果如下:

[root@python 422]# python testinitRetun.py

----------

Kel class called

----------

J class is called

----------

Kel class called

M class is called可以看到,如果子类写了自己的init方法,那么不会自动的调用父类的init方法,必须在子类的init方法中自己进行调用,如上子类M所示

每个子类最好构造自己的构造器,不然积累的构造器会被调用,然而,如果子类重写基类的构造器,基类的构造器就不会被自动调用了。

a、 基类的构造器就必须显式的写出来才会被执行

b、 传递self的实例对象给基类进行调用,在上面的例子中,使用的是内建方法super,最好是使用super方法

在使用super调用基类方法的时候,找到基类方法,并且传入self参数即可,不需要明确指定父类的名字,并且在修改的时候,也是容易修改的。

4、 类的使用

一个类被定义后,目标就是要把它当成一个模块来使用,并把对象嵌入到代码中,同其他数据类型及逻辑执行流混合使用。

使用类的方式有两种,一种是组合,一种是派生

#!/usr/bin/env python

class Phone(object):

def __init__(self,ph):

self.phone = ph

class Person(object):

def __init__(self,nm,ph):

self.name = nm

self.phone = Phone(ph)

p = Person('kel','1234143')

print p.name,p.phone.phone

如上代码所示,使用的是组合的方式,在类Phone中,表示手机号码,而在类Person中包含了一个phone对象,那么就表示person has-a phone,类与类之间的关系为has-a的关系,在一个类中包含其他类的实例,就表示为组合。

class Person(object):

def __init__(self,nm,ph):

self.name = nm

self.phone = Phone(ph)

class Kel(Person):

def shout(self):

pass

如上的代码中Kel继承了person类,从而表示为类与类之间的关系为派生关系,也就是表示:相同的类具有一些不同的功能,从而可以写出自己的方法。

一个子类可以继承它的基类的任何属性,不关是数据属性还是方法。

在继承中可以覆盖父类的方法,——直接使用同名的函数即可进行覆盖,也就是所谓的override方法

关于python类_python中类的总结相关推荐

  1. python类_Python中的类

    Python和Java都是面向对象的语言,对象从类中获取,类指的是同一类具有相同特征的事物,比如拉布拉多,柯基,哈士奇,它们都是狗,具有狗的相同特征,所以可以被归为一类Dog,Python中类的使用与 ...

  2. python如何定义类_Python中类的定义、继承及使用对象实例详解

    本文实例讲述了Python中类的定义.继承及使用对象的方法.分享给大家供大家参考.具体分析如下: Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类 ...

  3. python类_python类和对象

    1.self? python的self相当于c++的指针 self相当于每个房子的门派号,同一个类生成很多对象,对象很相似.当一个对象的方法被调用时,对象为第一个参数传递给方法. 2.python的魔 ...

  4. python中的类的属性是什么_python中类属性和数据属性的解释

    python中的类叫class object,类的实例叫instance object. 类 Class Objects 类拥有两种操作,1.类属性 attribute references 2.实例 ...

  5. python中对象的特性_python中类与对象之继承,python类和对象理解,面对对象的三大特性之...

    python中类与对象之继承,python类和对象理解,面对对象的三大特性之 面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在 ...

  6. python如何导入模块中的类_python导入模块中类的方法

    自定义标题 python导入模块中类的方法 1.导入模块中的单类 2.一个模块中存储多个类时导入的方法 3.导入模块中所有类的方法 4.导入模块中的类时把类使用as取一个别名 python导入模块中类 ...

  7. python类之间方法互相调用_Python中类与类之间属性和方法的调用

    Python中类与类之间属性和方法的调用 class A(object):  #定义一个类 name='python' #类属性 def __init__(self): #实例属性 self.age= ...

  8. python类中的属性分为类属性和实例属性两种_python中类和实例如何绑定属性与方法示例详解...

    前言 python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,由于Python是动态语言, ...

  9. python函数和类的区别_Python中类中的方法还有区别?

    上一篇,我们讲到Python类中的属性是有区别的,爱思考的小伙伴们可能就会问了,Python中的方法是不是也有区别呢?是的,而且Python中的方法区别更大,让我们来看看吧~ Python类中的三种方 ...

最新文章

  1. 两台winXP电脑不能互相访问共享文件夹故障的最终解决方法
  2. python画仿真图-Python数据分析:绘图可视化之matplotlib入门
  3. Python自动化运维之常用模块—OS
  4. php post aspx,PHP模拟POST aspx页面不成功
  5. 年薪10万的前端一定会用的19 个 JavaScript 简写方法!
  6. 什么行业适合年轻人自主创业
  7. 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)...
  8. 一个苹果证书怎么多次使用——导出p12文件
  9. 利用STM32PWM占空比实现呼吸灯
  10. PKM个人知识管理整理(一)
  11. “某某云词典” – 纠结的初体验
  12. 开水果店的风险,开水果店有什么风险
  13. pytorch股票预测
  14. 办公室业务杂志办公室业务杂志社办公室业务编辑部2022年第18期目录
  15. MySQL的limit分页,为什么越往后翻越慢,怎么解决?
  16. 2023年中国科学技术大学计算机考研上岸前辈备考经验
  17. 根据银行的标志 获取颜色
  18. 图形学实验零 读取三角网格并交互
  19. NutUI 4.0 正式发布!
  20. cf不能全屏win7的解决方法_Win7系统时间不能修改的解决方法

热门文章

  1. java 16 binary_【图片】【困扰】java(tm) platform se binary 已停止工作该如何是好【minecraft吧】_百度贴吧...
  2. C++全局变量和局部变量名称可以相同
  3. vscode debug c++与opencv程序
  4. 中档微型计算机配置图,实训1-微机应用现状调研实训报告.docx
  5. zynq linux网口不通,已解决: ZYNQ 7035以太网口无法连通 - Community Forums
  6. oracle 会话 临时表,Oracle 学习系列之二(会话与事务级临时表)
  7. 协议簇:TCP 解析: 连接断开
  8. php5.4环境升级,CentOS环境中编译升级PHP至5.4版本记录
  9. cookie 在线人数列表_前端学习随笔2 在线简历
  10. Linux中实现远程登录Xshell和Xftp