欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python【day 17】面向对象-成员

程序员文章站 2022-06-15 18:11:28
类的变量分成2种: 1、成员变量 概念:在构造方法中的变量,前面带有self 作用:可以在类中不同的方法间使用 2、类变量-静态变量 概念:在类中,构造方法和普通方法之外,定义的变量 作用: 1、调用 1、类名可以调用 类名.类变量 2、对象名也可以调用 对象名.类变量 ... ......
类的变量分成2种:
1、成员变量
    概念:在构造方法中的变量,前面带有self
    作用:可以在类中不同的方法间使用

2、类变量-静态变量
    概念:在类中,构造方法和普通方法之外,定义的变量
    作用:
        1、调用
            1、类名可以调用       类名.类变量
            2、对象名也可以调用   对象名.类变量
        2、修改
            1、只能是类名才能修改   类名.类变量 = 类变量的新值
            2、对象名不能修改
               特别注意:如果用  对象名.类变量=值,这个是对对象新增了一个属性,和类变量没有任何关系

总结:
1、类变量用类名来操作(访问和修改),比较规范
   类变量就不要用对象名来操作
2、类变量建议写在类中的构造方法之前,也是规范
类中的方法分类:
1、成员方法-实例方法-最常见
    1、写法
        第一个参数是self,对象本身
    2、调用
        对象来调用成员方法

2、静态方法-函数
    1、写法
        1、参数,不需要传self
        2、方法名字前面加上@staticmethod
    2、调用
        类名来调用静态方法
    3、例子
        字典中的fromkeys 就是一个静态方法
    4、适用场景
        当做函数来看

3、类方法
    1、写法
        1、第一个参数是cls,表示类名
        2、方法名上方加上@classmethod
    2、调用
        类名来调用类方法
    3、适用场景
        可以在类方法中创建对象
类中的属性
1、概念
    用一个方法的返回值来表示属性
2、写法
    1、 @property
    2、方法的参数只有一个self
    3、方法必须有返回值 return
3、调用
    1、对象名.属性名
        注意:属性名就是方法名,属性后面不能加小括号
4、适用场景
    1、人的年龄就不适合当做成员变量来存储,而应该把生日作为成员变量-字段
    2、但是年龄是人的一个属性,就可以通过生日来换算出来
    3、人的年龄是一个属性,如果通过成员方法-动作来计算也可以,但是用属性-名词更好一些
5、注意点
    调成员方法和调属性的区别
    1、前者  对象名.成员方法名()  方法名后面有小括号
    2、后者  对象名.属性    属性后面没有小括号
类中的私有
1、分类
    私有变量
    私有方法

2、写法
    私有变量:变量名字前面加上__
    私有方法:方法名字前面加上__

3、特点
    1、私有变量:
       对象无法访问私有变量
    2、私有方法:
        对象无法访问私有方法

4、如何访问私有变量和私有方法
    1、对象可以通过调用成员方法,间接访问私有变量
       私有变量只能在自己类中访问
    2、对象可以通过调用成员方法,间接调用私有方法
        私有方法只能在自己类中调用

5、适用场景
    1、用的比较少(私有变量和私有方法,在python中)
成员
    概念:
        在类中定义的变量和方法都被称为成员

    1、变量
        1、成员变量--重点1
            定义:在构造方法中定义的
            别名:实例变量,字段(对应数据表的字段)
            写法:self.变量名
        2、类变量
            定义:在类中,构造方法和普通方法之外定义的变量就是类变量
            写法: 一般是通过类名来调用的  类名.类变量
            别名:静态变量
            特点:共享出去的

    2、方法
        1、成员方法--重点2
            定义:类中的普通方法
            写法:默认第一个参数是self
            调用:通过对象来调用

        2、类方法
            定义:第一个参数默认是cls,表示类名
            写法:方法名字上一行是@classmethod
            用法:主要用于在类方法中创建对象,设计模式

        3、静态方法
            定义:参数没有self,即静态方法不需要传递当前类的对象
            写法:方法名字上一行是@staticmethod
            理解:把静态方法理解成类中的函数就可以了

    3、属性
        定义:用方法-动作来描述属性信息
        例子:比如人的年龄,一般都是通过出生日期计算出来的
            1、age用变量定义,会每年都变,不适合
            2、age用普通方法来计算,是可以的
               但是普通方法一般是一个动作,age是一个属性(名词)
            3、age用属性来表示,比较适合
        写法:
            1、属性的写法和普通方法类似,但是上面需要加一行@property
            2、只有一个参数self
            3、必须有返回值
        调用:对象调用属性的时候,属性名字后面是不加小括号的
              这一点,和对象调用方法有区别,方法名字后是加小括号的

    4、私有
        1、私有变量
            定义:只能在类中使用,对象无法直接访问私有变量
            写法:__变量名,即变量名前面加上双下划线
            用法:对象可以通过调用成员方法,间接访问私有变量
                  成员方法中,私有变量的访问,写法是self.__私有变量

        2、私有方法
            定义:只能在类中使用,对象无法直接访问私有方法
            写法:__方法名,即方法名前面加上双下划线
            用法:对象可以通过调用成员方法,间接调用私有方法
                  成员方法中,有私有方法的调用,写法是self.__私有方法名()