博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的私有成员,类方法与静态方法,属性,isinstance、issubclass,异常处理
阅读量:4967 次
发布时间:2019-06-12

本文共 4359 字,大约阅读时间需要 14 分钟。

1.类的私有成员

类中的私有成员: 私有类的静态属性, 私有对象属性,私有方法=>类外部、派生类不可访问,内部可以访问以私有属性为例:class B:    school_name = '老男孩教育'    __consc_edu = '良心教育'class A(B):    class_name = 'python23'    __girlnum = '1个'    def func(self):        print(self.__girlnum)    def func1(self):        print(self.__consc_edu)obj = A()print(obj.__girlnum)   #类外部不可访问print(A.__girlnum)     #类外部不可访问obj.func1()            #派生类不可访问obj.func()    #内部可以访问拓展:class A:    __girlnum = '1个'    print(A.__dict__)python中所有的私有成员: 就是在私有成员前面加上 _类名而已print(A._A__girlnum)  #千万不要这么去访问!

2.类方法与静态方法

class A:    def func(self):        print('实例方法')    @classmethod  # 类方法: 由类名直接调用的方法,会自动的将类名传给cls    def a_func(cls):        print('这是类方法')A.a_func()obj=A()obj.a_func()  # 对象也可以调用类方法,但是会自动将其从属于的类名传给cls# 定义一个Student类,统计学生的个数class Student:    n=0    def __init__(self,name):        self.name=name        Student.count()    @classmethod    def count(cls):        cls.n+=1a=Student('蔡徐坤')b=Student('ikun')print(Student.n)# 静态方法: 不依赖于类,也不依赖于对象,就是一个普通的函数放置于类中是结构更加清晰与合理class A:    def __init__(self,name):        self.name=name    @staticmethod    def static_func():        print('静态方法')obj = A('蔡徐坤')obj.static_func()

3.属性

class BMI:    def __init__(self, name, weight, height):        self.name = name        self.weight = weight        self.height = height    def BMI(self):        return self.weight / self.height**2obj =BMI('蔡徐坤',65, 1.77)print(obj.BMI())=> 要让bmi方法伪装成属性,虽然在代码级别没有提升,但是看起来更合理class BMI:    def __init__(self, name, weight, height):        self.name = name        self.weight = weight        self.height = height    @property    def bmi(self):        return self.weight / self.height**2    @bmi.setter    def bmi(self,a):  # 注意要传参数        print('修改时运行')    @bmi.deleter    def bmi(self):        print('删除时运行')obj =BMI('蔡徐坤',65, 1.77)print(obj.bmi)obj.bmi='唱跳rap'del obj.bmi# 设置属性的另外一种写法:class Foo:    def get_AAA(self):        print('get的时候运行我啊')    def set_AAA(self,value):        print('set的时候运行我啊')    def delete_AAA(self):        print('delete的时候运行我啊')    bbb = property(get_AAA,set_AAA,delete_AAA) #内置property三个参数与get,set,delete一一对应f1=Foo()f1.bbbf1.bbb='aaa'del f1.bbb

4.isinstance、issubclass

对象与类之间的关系:class A:    passclass B(A):    passprint(isinstance(obj,N))  =>  判断obj对象是否是由N类(N类的派生类)实例化的对象,返回True类与类之间的关系:class A:    passclass B(A):    passclass C(B):    passprint(issubclass(C,B))print(issubclass(C,A))print(issubclass(M,N))  =>  判断M是否是N(N的派生类)的子类

5.异常处理

异常:程序出现中断,飘红,致使整个项目中断了错误类型:语法错误、逻辑错误异常常见种类:AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出异常;基本上是无法打开文件ImportError 无法引入模块或包;基本上是路径问题或名称错误IndentationError 语法错误(的子类) ;代码没有正确对齐IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键KeyboardInterrupt Ctrl+C被按下NameError 使用一个还未被赋予对象的变量SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)TypeError 传入对象类型与要求的不符合UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它ValueError 传入一个调用者不期望的值,即使值的类型是正确的异常形式:单分支:try:    l1 = [1,2,3]    print(l1[100])except IndexError as e:    print(e)    print('索引错误')多分支:dic = {1: 111,2: 222,3: 333,}while 1:    try:        num = input('请输入序号')        int(num)        print(dic[int(num)])    except KeyError as e:        print('选项超出范围,请重新输入')    except ValueError as e:        print('请输入数字')# 及时解决异常,程序的分流万能异常:try:    l1 = [1,2,3]    print(l1[100])except Exception as e:    print(e)什么时候用万能异常,什么时候用多分支?只是想把这个异常处理掉,让程序继续运行  =>  万能异常根据不同的异常执行不用的逻辑流程   =>   多分支万能异常+多分支:dic = {1: 111,2: 222,3: 333,}while 1:    try:        num = input('请输入序号')        int(num)        print(dic[int(num)])    except KeyError as e:        print('选项超出范围,请重新输入')    except Exception:        pass            # 万能异常要写在最后异常处理其他成员:dic = {1: 111,2: 222,3: 333,}while 1:    try:        num = input('请输入序号')        int(num)        print(dic[int(num)])    except KeyError as e:        print('选项超出范围,请重新输入')    except Exception:        pass    else:          print(666)# 如果上面无异常执行else语句,否则不执行else语句finally:在整个程序终止之前,执行finally,通常用在文件操作、数据库、函数,以文件操作为例:try:    f = open('register', mode='w')    f.write('abc')    f.write('abc')    f.write('abc')    l1 = [1, 2, 3]    print(l1[1000])    f.write('abc')finally:    f.close()主动抛出异常:raise Exception('U R 蔡徐坤')断言:assert 条件  =>  条件成立,执行下面代码;条件不成立,终止程序自定义异常:class Connection(BaseException):    def __init__(self,msg):        self.msg = msgraise Connection('U R 蔡徐坤')# 异常处理不能经常使用:耗费性能,代码的可读性变差

转载于:https://www.cnblogs.com/wxl1025/p/11172642.html

你可能感兴趣的文章
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>
Python模块调用
查看>>
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>