day15-类和对象2

day15-类和对象2

一、类方法和静态方法

1.类中的方法

(1)对象方法

  • 怎么声明:直接声明在类中的函数
  • 怎么调用:通过对象来调用
  • 特点:有个指向当前对象的默认参数self;调用的时候不需要传参
  • 什么时候使用:实现函数的功能需要用到对象属性

(2)类方法

  • 怎么声明:声明函数前加@classmethod

  • 怎么调用:通过类来调用,类名.方法名()

  • 特点:有个默认参数cls,这个参数在通过类调用的时候不需要传参;指向当前类(谁调用指向谁)

    ​ 类能做到的事情,cls都可以

  • 什么时候使用:实现函数的功能不需要对象属性的前提下需要类的字段(需要类),这个时候就使用类方法

(3)静态方法

  • 怎么声明:声明函数前加@staticmethod
  • 怎么调用:通过类来调用,类.方法名()
  • 特点:没有特点(没有默认参数)
  • 什么时候使用:实现函数的功能既不需要对象属性,也不需要类的字段的时候

二、私有化

1.访问权限

  • 公开(public):属性和方法在类的内部可以使用、可以被继承也可以在类的外部使用
  • 保护(protect):属性和方法在类的内部可以使用、可以被继承;不可以在类的外部使用
  • 私有(private):属性和方法在类的内部可以使用、不可以被继承也不可以在类的外部使用
  • ​ python中本质上所有的属性和方法都是公开的,私有化是假的私有化

2.私有化

语法:在声明属性或方法的时候,在属性名前或者方法名前加__

注意:只能以__开头,不能以__结尾

python私有化的原理:只是单纯在属性或者方法名前加_类名,导致直接使用原名使用不了属性和方法


三、getter和setter

1.什么时候使用getter和setter

  • getter — 希望获取一个属性值之前做点别的事情,就给这个属性添加getter
  • setter — 希望给属性赋值之前做点别的事情,就给这个属性添加setter

2.怎么给属性添加getter和setter

(1)怎么添加getter
  • 在需要添加getter的属性前添加_
  • @property后面声明一个函数,函数名和去掉_的属性名一致,并且函数需要一个返回值表示获取属性的值
  • 在外面通过不带_的属性名去获取对应的属性值
(2)怎么添加setter
  • 如果想要给数学添加setter,必须先给它添加getter
  • @getter名.setter后声明函数;函数名和去点_的属性名一致,这个函数不需要返回值,但是需要一个参数
  • 在外面通过不带_的属性名去给属性赋值

四、继承

1.什么是继承

让子类直接拥有父类的属性和方法,这个过程就是继承

2.怎么继承

python中所有的类,默认都是继承字object类。(object是基类)

语法:class 类名(父类1,父类2,...)

继承发生后子类拥有父类的所有属性和方法

3.子类添加内容

(1)添加字段和方法

直接在子类中声明新的字段或者方法

(2)添加对象属性

补充:

  • 类中的函数的调用:先看当前类中有没有这个方法,如果有直接调用;如果没有就看父类有没有这个方法,有的话就调用,如果没有就看父类的父类... 以此类推,如果找到基类都没有,程序才会报错

  • super的使用: 在子类对象方法和类方法都可以通过super()去调用父类的对象方法和类方法;

    ​ 在子类的静态方法中不能够使用super()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • day15-类和对象2 一、类方法和静态方法 1. 类中的方法 1)对象方法a.怎么声明:直接声明在类中的函数b....
    Octane阅读 119评论 0 1
  • 类方法和静态方法 1.类中的方法 1)对象方法a.怎么声明: 直接声明在类中的函数b.怎么调用: 通过对象来调用c...
    冯书简阅读 207评论 0 0
  • 01.内置类属性 1.内置类属性就是魔法属性a.魔法属性:属性名的前后都有两个下划线b.魔法方法:方法的前后都有两...
    Ftr_阅读 236评论 0 0
  • 1 内置类属性 内置类属性就是魔法属性魔法属性:属性名的前面和后面都有两个下划线。魔法方法:方法的前后都有两个下划...
    C0mpass阅读 302评论 0 0
  • 类中方法:对象方法、类方法和静态方法 1.对象方法: a.直接声明在类中b.自带参数selfc.通过对象来调用 2...
    Heyjoky阅读 125评论 0 0