首页 > 代码库 > python 面向对象和类成员和异常处理

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下的f3a.f3=12      #调用@f3.setter下的f3del 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 osos.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 ostry:    path="kkk"    os.mkdir(path)except FileExistsError:    print("%s目录已经存在"%path)

 

像上面确定错误类型的可以直接用错误类型,如果无法判断错误类型也可以用Exception:

import ostry:    path="kkk"    os.mkdir(path)except Exception:    print("%s目录已经存在"%path)

 

一个完整的捕获:

import ostry:    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.errormsgraise MyException("出错了")得出:__main__.MyException: 出错了

 

python 面向对象和类成员和异常处理