• 类的成员和异常处理


    1.私有成员

    • 类中的私有成员
      • 在属性名称前加__可将该属性变成私有属性
      • 对于类的公有静态属性,类的外部,类的内部,类的派生类都可以访问
      • 私有静态属性:类的外部不能访问,类的派生类不能访问,只有在类的内部才能够访问
    • 对象私有属性
      • 类的内部可以使用
      • 派生类中也不可访问
      • 类的外部也不能访问
    • 私有属性应用场景
      • 如果想设定一些私有的或者是不想让类外面用到的密码,加密方式等,可设定为私有属性
      • 可通过在私有成员前面加上_类名这种方式进行访问,但是千万不要这么访问!!!
    # class A:
    #     __girlnum = '1个'
    #
    
    # print(A.__dict__)
    
    # python中所有的私有成员: 就是在私有成员前面加上 _类名而已.
    # print(A._A__girlnum)  # 千万不要这么去访问!!!
    

    2.类方法和静态方法

    • 实例方法
      • 定义 ; 第一个参数必须是实例对象,该参数名一般约定位"self" ,通过它来传递实例的属性和方法(也可以传类的属性和方法
      • 调用:只能由实例对象调用
    • 类方法
      • 定义:使用装饰器@classmethod.第一个参数必须是当前类对象,该参数名一般约定为"cls",通过它来传递类的属性和方法(不能传实例的属性和方法)
    • 静态方法
      • 定义:使用装饰器@staticmethod.参数随意,没有self和cls参数,但是方法体重不能使用类或实例的任何属性和方法
      • 调用:实例对象和类对象都可以调用
    • 双下方法
      • 定义:双下方法是特殊方法,它是解释器提供的,有双下划线加方法名加双下换线的具有特殊意义的方法,双下方法主要是python源码程序员使用的
        定义一个Student类,我要统计学生的个数.

    class Student:

    num = 0

    def init(self,name):

    self.name = name

    self.count()

    @classmethod

    def count(cls):

    cls.num = cls.num + 1

    @classmethod

    def get_num(cls):

    return cls.num

    ly = Student('李业')

    sq = Student('申强')

    sq1 = Student('申强')

    sq2 = Student('申强')

    sq3 = Student('申强')

    sq4 = Student('申强')

    print(Student.get_num())

    num = 1

    for i in range(4):

    num += 1

    for i in range(6):

    pass

    print(num)

    3.方法伪装为属性

    • property是一种特殊属性,访问它时会执行一段功能(函数)然后返回
    • 应用场景: 当一个类的函数定义成特性以后,对象再去使用的时候该函数的时候,根本无法察觉到是执行了一个函数后计算出的据俄国,这种特性遵循了统一访问原则
    #bmi值测试人体体脂:
    
    # 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**2
    #
    # tb = Bmi('太白',80, 1.75)
    # print(tb.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
    #
    # tb = Bmi('太白',80, 1.75)
    # print(tb.bmi)
    # print(tb.weight)
    
    
    
    
    class Foo:
    
        def __init__(self,name):
            self.name = name
        @property
        def aaa(self):
            print('get的时候运行我啊')
    
        @aaa.setter
        def aaa(self,v):
            print('修改的时候执行我')
    
        @aaa.deleter
        def aaa(self):
            print('删除的时候执行我')
    obj = Foo('alex')
    # print(obj.name)
    # obj.name = 'dsb'
    # del obj.name
    # print(obj.name)
    # obj.aaa
    # obj.aaa = '太白'
    # print(Foo.aaa)
    # del obj.aaa
    
    # 设置属性的另外一种写法:
    
    
    # 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.bbb
    # f1.bbb='aaa'
    # del f1.bbb
    

    4.isinstance issubclass type.py

    • isinstance(a,b) : 判断a是否是b类(或者b的派生类)的实例化对象
    • issubclass(a,b) : 判断a类是否是b类(或者b类的派生类)的派生类
    • 元类:type
      • type元类是获取该对象从属于的类,而type类比较特殊,python原则是:一切皆对象,其实类也可以理解为对象.而type元类又称为构件类,python中大多数内置的类(包括object)以及自己定义的类都是type元类创造的
      • object是type类的实例,而type类是object类的子类

    print(isinstance(s1, Iterable))

    type 到底是什么?

    type 元类 python中一切皆对象 , 一个类也是一个对象.

    么这个(类)对象肯定是由类实例化出来的.

    python中你创建的所有类,以及大部分list str等等这些类,都是从type元类实例化得来的.

    python中继承object类都是新式类.

    object 也是由type元类实例化得来的.

    type

    
    ### 5.异常处理
    
    - 语法错误:必须改正,不应该出现
    - 逻辑错误:输入空格,非法字符等,其实if条件判断语句就是简单的异常处理
    - 异常
      - 异常发生之后,异常之后的代码就不执行了
    - 异常处理
      - python解释器检测到错误,触发异常(或者程序员自己触发异常)
      - 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关),如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,是程序不会崩溃,这就是异常处理
  • 相关阅读:
    CF1270H
    CF1305G
    LeetCode-Sqrt(x)
    LeetCode-Plus One
    LeetCode-Integer to Roman
    LeetCode-Roman to Integer
    LeetCode-String to Integer (atoi)
    LeetCode-Reverse Integer
    C++
    LeetCode-Gray Code
  • 原文地址:https://www.cnblogs.com/W-Y-C/p/11171781.html
Copyright © 2020-2023  润新知