关于python类_python中类的总结

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方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

折线图 java_java报表折线图

package com.potevio.rnd.tobacco.mine;import java.util.Map;/*** description 数据BEAN* author Zhou-Jingxian*/public class Bean {private String goods_name ;private Map priceindexMap;public String getGoods_name() {return goods_name;}public void setGoods_name(S…

windows无法检索有关这台计算机上的磁盘信息_磁盘镜像软件OO DiskImage Pro 15.5介绍及安装教程...

Active Disk Image是一种磁盘映像软件&#xff0c;可以精确复制任何PC磁盘(HDD&#xff0c;SSD&#xff0c;USB&#xff0c;CD&#xff0c;DVD&#xff0c;Blu-ray等)并将其存储在文件夹中。磁盘映像可用于备份&#xff0c;PC升级或磁盘复制。万一计算机出现故障&#xff0c;可…

java中的抽象方法_Java中的抽象类和抽象方法

###Java中的抽象方法和抽象类&#xff1a;abstract:关键字&#xff0c;可以用于修饰方法和类抽象方法&#xff1a;不同类的方法是相似的&#xff0c;但是具体实现的内容又不太一样&#xff0c;没有具体的方法体。抽象类&#xff1a;有抽象方法的类必须是抽象类类与抽象类的关系…

word手写字体以假乱真_Word小技巧|打印作文草稿纸

前期介绍过一些Word使用中的小技巧&#xff0c;例如WORD快速查找的2个小技巧 https://www.iappi.cn/2019_08/20191147.html&#xff0c;使用Word创建九宫格图像 https://www.iappi.cn/2019_07/20191064.html 等。今天再分享一个打印作文草稿纸的技巧。很多时候需要规范写好作文…

java 判断范围_java判断一个点是否在一个围栏范围内

应项目需求&#xff0c;需要判断一个点所属哪个区域范围内管辖&#xff0c;突然想起来三年前做了个外卖的项目里面有个功能&#xff0c;判断用户是否在商家自己划的配送范围内&#xff0c;又找回来以前的代码来看了下&#xff0c;所以在此处记录一下DataNoArgsConstructorAllAr…

概要设计说明书_没有什么比牙签更好的设计了

牙签是设计公理的典型例子&#xff0c;形式服从功能。它的形式和功能是单一的、紧凑的、轻质的、可生物降解的、可持续的实体。不证自明的&#xff1a;它的形状是设计功能的缩影&#xff0c;同时作为手柄和说明书。它的形状不仅告诉你如何握住和使用它&#xff0c;而且告诉你把…

java项目log4j_java项目测试log4j

一、基础入门1.1 下载安装下载相应的log4j-1.2.15.jar(也可以下载其他的版本)提供一个下载jar包的网站(http://search.maven.org/)新建一个log4j.properties文件&#xff1a;#配置根Loggerlog4j.rootLoggerinfo, RF #info代表的是日志输出的级别log4j.appender.RForg.apache.lo…

webrtc 代码_英特尔开源WebRTC开发套件OWT

为了抢占实时视频的巨大市场&#xff0c;英特尔开源了WebRTC开发套件&#xff0c;并将其命名为Open WebRTC Toolkit (OWT)。由于实时视频编码、转码需要大量的计算资源&#xff0c;Open WebRTC Toolkit将为英特尔带来巨大的潜在商业回报。文 / Ant去年在旧金山举办的2018 Krank…

零基础自学java_零基础学Java——小白的Java之路(4)

方法方法是一段可以重复调用的代码块&#xff0c;这个代码块实现了某个功能&#xff0c;当我们的程序中需要这一个功能的时候&#xff0c;调用这个方法即可&#xff0c;不再需要重复书写这个功能的代码。方法的定义格式public static ( ,... ){方法体&#xff1b;[return 表达值…

异步fifo_跨时钟域同步(异步FIFO)

本文使用 Zhihu On VSCode 创作并发布跨时钟域同步&#xff08;异步FIFO&#xff09;之前学习了跨时钟域下的单bit信号同步的方法&#xff0c;这些单bit信号多是作为控制信号或者标志信号来使用&#xff0c;再实际的项目中&#xff0c;处理多bit数据也是十分常见的&#xff0c;…

think python 2ed_Think Python 2ed 笔记(二)

第六章 有返回值的函数1. 返回值&#xff1a;没有返回值的函数返回None2. 增量式开发&#xff1a;增量式开发的目标&#xff0c;是通过每次只增加和测试少量代码&#xff0c;来避免长时间的调试。该函数的最终版不会在运行时显示任何东西&#xff0c;仅仅返回一个值。 我们之前…

dumpbin发现没有入口函数_JavaScript基础之入口函数-2020版

JavaScript基础之入口函数-2020版1.入口函数window.onload function(){ 内部放js}这个函数的意思就是说&#xff0c;当我们页面加载完毕之后(就是说等页面的结构 样式 节点等加载完毕)&#xff0c;采取执行函数体里面的js部分。也就是说可以使用此方法&#xff0c;就不用考…

java相等_Java 判断相等

1.除 float 和 double 外的原始数据类型 : 使用 long a (long) 1234567890;long b (long) 1234567890;if (a b) {System.out.println("基本数据类型相等");}2.包装类使用 equals 或者转换为基本数据类型再用 Long a (long) 1234567890;Long b (long) 1234567890;i…

农委系统先进集体推荐报告_来自司法行政的他们,荣获上海档案系统表彰!

为表彰先进、弘扬正气&#xff0c;激发全市各级档案部门和广大档案工作者的积极性和创造性&#xff0c;进一步推进上海档案事业创新发展&#xff0c;经各地区、各部门、各单位民主推荐&#xff0c;市人力资源社会保障局和市档案局审核同意&#xff0c;决定授予50家集体“上海市…

java如何获得wlan mac_Android M 如何获取 Wifi MAC地址

今天在撸代码时发现&#xff0c;之前能获取mac地址的方法在nexus 6上返回了“02:00:00:00:00:00”&#xff0c;进入设置查看mac地址&#xff0c;结果不相同&#xff0c;肯定有问题&#xff0c;于是就开始上网查资料一探究竟。原先获取mac地址的代码段&#xff1a;6.0之前获取ma…

python docx官网_【记录】尝试用DocxyGen为Python代码生成文档

【背景】之前折腾技术的时候&#xff0c;或多或少&#xff0c;知道一个东西&#xff1a;DocxyGen是用于从代码生成文档的。最近&#xff0c;又从&#xff1a;->该地址无效&#xff0c;但是自己手动输入地址&#xff0c;而找到&#xff1a;看到页面右下角&#xff0c;就显示了…

我的世界java多大内存_我的世界电脑版内存多大

下载方法如下&#xff1a;1&#xff0c;百度搜索 我的世界电脑版&#xff0c;即可找到下载。2&#xff0c;直接点击普通下载&#xff0c;即可下载。3&#xff0c;我的世界电脑版硬件要求如下&#xff1a;最低配置&#xff1a;CPU&#xff1a;1.5G GHz多和处理器/2.0GHz单核处理…

天正双击墙体不能编辑_今日设计分享:CAD常用快捷键、Ps快捷键大全、天正快捷键总结!...

▶今天记忆一个技巧&#xff0c;成就明天一个大师&#xff01;▶同行小可爱们&#xff0c;加油吧&#xff01;CAD最常用快捷键L直线&#xff1b;PL多段线&#xff1b;U回车Ctrlz后退&#xff1b;D修改&#xff0c;调整&#xff1b;REC矩形&#xff1b;C圆&#xff1b;TR修剪&am…

java获取spring注解的实体_Spring 注解实体类中非数据库字段属性

今天要给一个实体类添加一个List集合属性&#xff01;private List childList new ArrayList();写完后get/set方法一写&#xff0c;启动就报错&#xff1a;org.hibernate.MappingException: Could not determine type for: java.util.List, at table: T_REVERTS, for columns:…

odoo tree视图过滤数据_数据存储结构 LSM Tree PK B TREE (从底层了解数据库设计)...

随着使用数据库的深度和理解能力的提升&#xff0c;有一个问题硬件的提升,与数据量的变化是否对数据库底层的架构有冲击。 我们公认的BTREE BTREE 是否还能面对现在的硬件的变化。 BTREE 到底是为那种硬件逻辑来服务的&#xff0c;这点是需要搞清楚的在MYSQL 中使用的BTREE的改…