python 面向对象和类成员和异常处理
python 面向对象
你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球
- class star:
- '''名字(name),赤道直径(equatorial diameter),极直径(polar diameter)'''
- def __init__(self,name,eqDiameter,poDiameter):
- self.name=name
- self.eqDiameter=eqDiameter #赤道直径
- self.poDiameter=poDiameter #极直径
- self.show()
- def show(self):
- print("A spin star %s,this ed is %s,pd is %s"%(self.name,self.eqDiameter,self.poDiameter))
- earth=star("earth",24901,24859)
- 得出:A spin star earth created,this ed is 24901,pd is 24859
类和对象的关系:
对象是类的实例
继承:
B类继承A类,A类的可以继承的成员,都是B类的,如果A类有的成员,B类也有,优先使用B类的成员,如果B类的对象要使用A类的成员,要用到多态。
称B类继承A类,B类是由A类派生的,A类是B类父类或基类,B类是A类的子类或派生类,判断方法:issubclass(C(子),B(父))
多态:多种形态------就是子类的对象可以使用父类的成员,这个成员子类里面已经有的,对象不满足子类的这个成员,去找它父类的方法
多个类的继承关系:
多继承实例:
python类成员:
1,字段:静态字段/普通字段
2,方法:静态方法/普通方法/类方法/特殊方法
3,属性
4,成员修饰符
5,特殊方法
类的成员是可以权限控制的,python的类权限只有私有(private)和共有(public),私有的对象的标志是成员前面加__
- class Province:
- country="中国" #静态变量
- __party="Comunity" #私有的静态成员
私有成员只能当前类内部使用,不能给对象和继承类使用
字段:
字段就是数据成员,静态字段储存在类里,普通字段储存在对象里,每个对象创建都需要开辟普通字段的内存空间,静态字段只需要呆在类的空间里,所以当普通字段太多的时候,如果确定某一个变量初始是固定的情况下,可以把这个变量变成静态字段
方法:
方法都属于类,普通方法由对象去执行,静态方法和类方法由类执行,不创建对象,省空间,类方法指定当前类
@staticmethod 定义静态方法
@classmethod 定义类方法
- class Province:
- country="中国" #静态变量
- __party="Comunity" #私有的静态成员
- def __init__(self,name):
- self.Myparty=self.__party #普通变量
- self.__name=name #私有,不能继承
- self.f1()
- self.__f1()
- def show(self): #普通对象,由对象去调用
- print(self.__name)
- @staticmethod #静态方法,通过类去调用,可以类内部使用
- def f1():
- print("fl")
- @staticmethod
- def __f1(self): #私有的静态方法
- print("private fl")
- @classmethod #类方法
- def f2(cls):
- print(cls)
属性成员:
看上去像方法,用起来像字段,装饰器:@property
属性可以打印值,赋值,删除值
- class profact:
- '''改造工厂'''
- @property #属性
- def f3(self):
- return 10
- @f3.setter #可以给属性赋值
- def f3(self,value):
- print(value)
- @f3.deleter #删除属性
- def f3(self):
- print("deleted")
- a=profact()
- result=a.f3 #调用的是property下的f3
- a.f3=12 #调用@f3.setter下的f3
- del a.f3 #调用@f3.deleter下的f3
特殊成员:
函数 |
说明 |
举例 |
__init__ |
构造函数,创造对象 |
|
__del__ |
析构函数,垃圾回收 |
|
__call__ |
把对象当成函数调用,当对象后面有()时候调用 |
a=A() print(a()) |
__str__ |
Print调用 |
print(a) |
__add__ |
This + other |
|
__sub__ |
This - other |
|
__iter__ |
迭代时自动调用,可以用yield配合 |
|
__getitem__ |
接收key,key接收切片1:2:3对应key.start Key.stop Key.step |
a[“ddd”] |
__setitem |
接收key和value |
a[“ddd”]=”dddd” |
__delitem__ |
接收key |
del a[“ddd”] |
异常处理:
当用户创建一个目录的时候,不能保证目录不存在
当用户删除目录的时候,不能保证目录存在,也不能保证该目录是否为空
以上这些情况都会导致异常出现,会导致程序终止,而这些本来明明不是问题的问题导致了程序终止,像这些我们明知道会报错的程序就可以用异常处理,显示友好的错误提示,提高用户体验
- import os
- os.mkdir("kkk") #kkk目录存在的情况下执行
- Traceback (most recent call last):
- File "F:/project/pysession/day08/异常处理.py", line 37, in <module>
- os.mkdir("kkk")
- FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'kkk'
改造后:
- import os
- try:
- path="kkk"
- os.mkdir(path)
- except FileExistsError:
- print("%s目录已经存在"%path)
像上面确定错误类型的可以直接用错误类型,如果无法判断错误类型也可以用Exception:
- import os
- try:
- path="kkk"
- os.mkdir(path)
- except Exception:
- print("%s目录已经存在"%path)
一个完整的捕获:
- import os
- try:
- path="kkk"
- os.rmdir(path)
- except FileNotFoundError:
- print("%s目录不存在"%path)
- except OSError:
- print("%s目录不为空"%path)
- except Exception:
- print("%s目录无法错误" % path)
- else: #仅在正确的情况下执行
- print("%s目录成功删除"%path)
- finally: #无论错误还是正确,都执行
- print("目录删除到此结束")
我可以自己制造错误 raise <错误类型>("<错误信息>"):
- raise Exception("出错了")
- 得出错误:
- Exception: 出错了
想要捕获错误,并且显错误信息:
- try:
- raise Exception("出错了")
- except Exception as errormsg:
- print(errormsg)
自己定义错误类型:
- class MyException(Exception):
- def __init__(self,errormsg):
- self.errormsg=errormsg
- def __str__(self):
- return self.errormsg
- raise MyException("出错了")
- 得出:__main__.MyException: 出错了
python 面向对象和类成员和异常处理的更多相关文章
- python面向对象(二)——类成员
Python面向对象 类成员 1.字段 普通字段 属于对象 静态字段 属于类 2.方法 普通方法 触发者是对象 括号里至少一个参数 se ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- Python 面向对象之一 类与属性
Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...
- Python 入门 之 类成员
Python 入门 之 类成员 1.类的私有成员: 私有: 只能自己拥有 以 __ 开头就是私有内容 对于每一个类的成员而言都有两种形式: - 公有成员,在任何地方都能访问 - 私有成员,只有在类的内 ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python学习day20 面向对象(二)类成员&成员修饰符
1.成员 类成员 类变量 绑定方法 类方法 静态方法 属性 实例成员(对象) 实例变量 1.1实例变量 类实例化后的对象内部的变量 1.2类变量 类中的变量,写在类的下一级和方法同一级. 访问方法: ...
- python面向对象与结构成员之间的关系
1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...
- python 面向对象(类)--学习笔记
面向对象是一种编程方式, 主要集中在类和对象的两个概念 python 中的类符合封装, 继承, 多态的特征 类 是一个模板, 是n多函数的集成 对象 是类的实例化 类的成员分为三大类:字段.方法.属性 ...
- python基础(27):类成员的修饰符、类的特殊成员
1. 类成员的修饰符 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的定义不同:私 ...
随机推荐
- spring mvc 4识别浏览器(移动端) spring-mobile-device
官方文档: http://projects.spring.io/spring-mobile/ 通过mvc.xml配置示例: http://blog.csdn.net/wuyt2008/article/ ...
- mybatis 使用记录(二) 动态拼接查询条件
2016-12-16 阅读项目代码时,在项目的xml文件中发现如下写法: SELECT student_user_id FROM tbr_student_class WHERE 1=1 <if ...
- 控制HTML Input只能输入数字和小数点
本文介绍两种控制在<input type="text" name="name" value="0" />中只允许输入数字和小数点 ...
- TFS下的源代码控制
以下主要描述了: TFS源代码控制系统的基本场景 如何把一个项目添加到源代码管理中 如何与服务器同步 如何做Check-In 如何做分支与合并 什么是上架与下架 我们知道工作项是项目管理的基本元素,但 ...
- gRaphael——JavaScript 矢量图表库:两行代码实现精美图表
gRaphael 是一个致力于帮助开发人员在网页中绘制各种精美图表的 Javascript 库,基于强大的 Raphael 矢量图形库.你只需要编写几行简单的代码就能创建出精美的条形图.饼图.点图和曲 ...
- jquery中ajax在firefox浏览器下“object XMLDocument”返回结果的解决办法
asp.net中借助jquery的ajax处理功能,使用起来很方便.但是在firefox下获得的data报错object XMLDocument.这是因为默认的情况下把datatype用html来解析 ...
- php 图片base64编码生成dataurl和保存为图片
<?php header('Content-type:text/html;charset=utf-8'); //读取图片文件,转换成base64编码格式 $image_file = 'aaa.j ...
- 营业额统计(SBT)
营业额统计(SBT) #include<cstdio> #include<cstring> #include<string> #include<cstdlib ...
- 通过宏判断VS编译版本以及系统平台
MSC_VER 定义编译器的版本.下面是一些编译器版本的_MSC_VER值(参见扩展阅读中的参考文献2的链接) MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio ...
- Java借助Runtime调用外部程序阻塞的代码
有时候在java代码中会调用一些外部程序,比如SwfTools来转换swf.ffmpeg来转换视频等.如果你的代码这样写:Runtime.getRuntime().exec(command),会发现程 ...