zoukankan      html  css  js  c++  java
  • 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: 出错了
  • 相关阅读:
    【干货分享】流程DEMO-制度发文和干部任免
    如何让流程表单禁用选人控件,但可以通过代码赋值?
    让任正非愤怒的到底是华为财管团队还是流程本身?
    品牌营销:不要Beat,要逼格!
    流程再造:以信息化管理解救“中国制造”
    三星Note 7停产,原来是吃了流程的亏
    BAT“搅局”B2B市场,CIO们准备好了吗?
    胡理辉:风电王国里的流程管控人
    周义:建设流程管理系统 我还在不停努力
    步步高彭雄:弄潮“互联网+零售”从端到端流程开始
  • 原文地址:https://www.cnblogs.com/euewrqe/p/5812125.html
Copyright © 2011-2022 走看看