day17 魔法方法del,继承,两种属性,三种方法

1.1 __del__()方法

创建对象后,python解释器默认调用__init__()方法;当删除一个对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法,一般是不需要自己写的,了解即可。

代码:

day17 魔法方法del,继承,两种属性,三种方法_第1张图片

运行结果:

day17 魔法方法del,继承,两种属性,三种方法_第2张图片

1.2继承

概念:将共性的内容放在父类中,子类只需要关注自己特有的内容,python中所有的内容都是对象,所有的对象都直接或间接继承了object

说明:· 虽然子类没有定义__init__方法,但是父类有,所以在子类继承父类的时候这个方法就被继承了,所以只要创建对象,就默认执行了那个继承过来的__init__方法总结· 子类在继承的时候,在定义类时,小括号()中为父类的名字· 父类的属性、方法,会被继承给子类

继承代码:

day17 魔法方法del,继承,两种属性,三种方法_第3张图片

运行结果

day17 魔法方法del,继承,两种属性,三种方法_第4张图片

父类的私有属性和方法不能被子类所继承

·私有的属性,不能通过对象直接访问,但是可以通过方法访问

·私有的方法,不能通过对象直接访问

·私有的属性、方法,不会被子类继承,也不能被访问

·一般情况下,私有的属性、方法都是不对外公布的,往往用来做内部的事情,起到安全的作用

代码:

day17 魔法方法del,继承,两种属性,三种方法_第5张图片

运行结果:

day17 魔法方法del,继承,两种属性,三种方法_第6张图片

1.1多继承

·python中是可以多继承的,在java中叫接口

·父类中的方法、属性,子类会继承

代码:

day17 魔法方法del,继承,两种属性,三种方法_第7张图片

运行结果:

day17 魔法方法del,继承,两种属性,三种方法_第8张图片

1.1重写/覆盖父类方法与调用父类方法

1.1.1重写父类方法

所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法

代码:

day17 魔法方法del,继承,两种属性,三种方法_第9张图片

运行结果:

day17 魔法方法del,继承,两种属性,三种方法_第10张图片

1.1.2调用父类的方法

代码:

day17 魔法方法del,继承,两种属性,三种方法_第11张图片

运行结果:

day17 魔法方法del,继承,两种属性,三种方法_第12张图片

当有两个父类都含有相同的方法名,优先调用第一个。

代码:

day17 魔法方法del,继承,两种属性,三种方法_第13张图片

运行结果:

day17 魔法方法del,继承,两种属性,三种方法_第14张图片

1.1类属性、实例属性

类属性1、类对象.属性     2、 存在于类的内部,方法的外部(指的是实例方法)

实例属性:实力对象.属性。   self表示当前的实例对象。

类属性是所有的实例对象都可以访问的,而实例属性只作用于当前实例对象

1.2实例方法、类方法、静态方法

实例方法:实例对象调用的方法。

类方法:是类对象所拥有的方法,需要用修饰器@classmethod(注解、元数据)来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数

静态方法:需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数

调用方式:

实例方法:实例对象点方法名。

类方法:实例对象和类对象都可以调用。

静态方法:实例对象和类对象都可以调用。

总结:

类方法和实例方法以及静态方法的定义形式就可以看出来:

1、类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;

2、实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。

3、静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用

你可能感兴趣的:(day17 魔法方法del,继承,两种属性,三种方法)