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 面向对象和类成员和异常处理的更多相关文章

  1. python面向对象(二)——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  2. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  3. Python 面向对象之一 类与属性

    Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...

  4. Python 入门 之 类成员

    Python 入门 之 类成员 1.类的私有成员: 私有: 只能自己拥有 以 __ 开头就是私有内容 对于每一个类的成员而言都有两种形式: - 公有成员,在任何地方都能访问 - 私有成员,只有在类的内 ...

  5. Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

    Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...

  6. python学习day20 面向对象(二)类成员&成员修饰符

    1.成员 类成员 类变量 绑定方法 类方法 静态方法 属性 实例成员(对象) 实例变量 1.1实例变量 类实例化后的对象内部的变量 1.2类变量 类中的变量,写在类的下一级和方法同一级. 访问方法: ...

  7. python面向对象与结构成员之间的关系

    1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...

  8. python 面向对象(类)--学习笔记

    面向对象是一种编程方式, 主要集中在类和对象的两个概念 python 中的类符合封装, 继承, 多态的特征 类 是一个模板, 是n多函数的集成 对象 是类的实例化 类的成员分为三大类:字段.方法.属性 ...

  9. python基础(27):类成员的修饰符、类的特殊成员

    1. 类成员的修饰符 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的定义不同:私 ...

随机推荐

  1. 数据挖掘之KNN算法(C#实现)

    在十大经典数据挖掘算法中,KNN算法算得上是最为简单的一种.该算法是一种惰性学习法(lazy learner),与决策树.朴素贝叶斯这些急切学习法(eager learner)有所区别.惰性学习法仅仅 ...

  2. php中序列化与反序列化

    解析PHP多种序列化与反序列化的方法 序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更 ...

  3. 【javascript基础】系列

    这是本人记录的javascript基础知识,希望能给大家的学习带来一点帮助. [javascript基础]1.基本概念 [javascript基础]2.函数 [javascript基础]3.变量和作用 ...

  4. 针对WebService服务,客户端调用时报序列化的最大项数maxItemsInObjectGraph超过65536问题

    今天在使用webservice服务时候,报异常"The InnerException message was 'Maximum number of items that can be ser ...

  5. windows 下编译log4cxx(x64)

    参考链接 http://blog.csdn.net/hnu_zxc/article/details/7786060 http://blog.chinaunix.net/uid-20384806-id- ...

  6. 普通B/S架构模式同步请求与AJAX异步请求区别(个人理解)

    在上次面试的时候有被问到过AJAX同步与异步之间的概念问题,之前没有涉及到异步与同步的知识,所以特意脑补了一下,不是很全面... 同步请求流程:提交请求(POST/GET表单相似的提交操作)---服务 ...

  7. Unity3d之json解析研究

    Unity3d之json解析研究     json是好东西啊!JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式      JSON简单易用,我要好好研究一下 ...

  8. 动手学servlet(五) 共享变量

    1. 无论对象的作用域如何,设置和读取共享变量的方法是一致的 -setAttribute("varName",obj); -getAttribute("varName&q ...

  9. Modelsim-altera 仿真 顶层原理图设计的FPGA

    我的原理图采用的是bdf的顶层原理图的设计,仿真工具用的是modelsim-altera,调用仿真后的错误提示: # ** Error: (vsim-3033) C:/Users/lenovo/Des ...

  10. 哈夫曼树---POJ3253

    http://poj.org/problem?id=3253 这就是 最典型的哈夫曼树的题型,我们就根据这道题学习一下哈夫曼树 这是最开始我们把21据下来之后我们据下8,然后再据下5得到34,可以看出 ...