python基础回溯 已到多继承(复习,持续更新)

本文介绍了Python中的析构函数,用于资源回收和内存管理,当对象不再被引用时自动调用。接着讲解了面向对象的三大特征:封装(使用__init__方法封装内容)、继承(节省开发时间和提高效率,包括单继承和多继承)和多态(行为的统一)。文中通过实例展示了如何在子类中重写父类方法,并讨论了类与对象、实例之间的关系以及类方法的使用。
摘要由CSDN通过智能技术生成

一、析构函数

用于资源回收,销毁对象,回收内存

def __del__(self):

在没有被引用的情况下,解析器会 自动调用 此函数,来释放内存空间
在程序结束了才 自动调用

dog=Animal("小狗")

del dog

手动调用,析构函数也执行

释放完dog对象,就不能使用对象了

没写这个析构函数,程序也会执行

二、三大特征

python 展现面向对象的 三大特征:
1.封装

*其实就是使用__init__(初始化构造方法)将内容  封装到对象中
通过对象直接  or self来获取封装的内容*

2.继承

*子继承父* 节省开发时间,增强开发效率
减少代码的重复编写,精简代码的层级结构,便于扩展
子类为派生类,父类为基类

3.多态

1、单继承

class Accessories(object):  # 父类
    def Interesting(self):
        print("很好看")

# 子类
class Watch(Accessories):
    def Wrist(self):
        print("手表戴在手腕上")
class Necklace:
    def Neck(self):
        print("项链戴在脖子上")

手表有继承父类, 项链没有

w1=Watch()
w1.Interesting()   继承了父类的行为

2、多继承

子类
父类1
父类2
#父类
class A(object):
class B(object):
#子类
class c(A,B):

注意查找行为的顺序
用广度优先的方法去看待

1、

class A1(object):
    def name(self):
        print('a1.name')
        
class B(A1):
    def name(self):
        print('b.name')

b1=B()
b1.name()
若 **子类和父类** 中有相同命名的行为:
输出的是		子类的行为
b.name

2、

class A1(object):
    def name(self):
        print('a1.name')

class A2(object):
    def name(self):
        print('a2.name')

class E(A2,A1):
    pass
    
e1=E()
e1.name()
若**多个父类**中有相同命名时:
按照书写的顺序	class E(A2,A1):		a2.name
				class E(A1,A2):		a1.name
	决定输出

3、

class A1(object):
    def name(self):
        print('a1.name')
        
class B(A1):
    def name(self):
        print('b.name')
        
class C(A1):
    pass
    
class D(C,B):
    pass

d1=D()
d1.name()
B有name行为
A1爷爷 有name行为
C无行为
D孙子了吧
若**孙子....**
假设父亲(B)爷爷(A1)都有隐性基因,母亲没有此隐性基因
孙子继承的是父亲的(好家伙开始乱讲生物了)
(因为广度优先,父亲跟孩子更近。。。)
结果为:b.name

如果母亲(C)继承了爷爷(A1)的行为,系统会报错
自行体会吧,这么说只是为了让自己更好理解

4、

直接继承A的行为
C无行为,继承B
B无行为 ,继承A
A有行为

跨越继承

3、重写父类

方法覆盖
(继续是首饰的例子)

class Accessories(object):  # 父类

    def __init__(self,color,size):#!!!!此处注意
        self.color=color
        self.size=size
        
    def Interesting(self):
        print("很好看")

# 子类
class Watch(Accessories):

    def __init__(self):		#!!!!此处注意
        pass
        
    def Interesting(self):	#重写
        print("一般般")
    def Wrist(self):
        print("手表戴在手腕上")
若父类有def __inif__ 则子类必须有def __inif__
否则报错

三、类与对象与实例

class A:			#类对象
	color='yellow'	#类属性
	
	def __init__(self,size):
		self.size=size		#实例属性

通过 实例对象 访问 类属性

a1=A(8)
print(a1.color)	

通过 实例对象 访问 实例属性

print(a1.size)

通过 类对象( A ) 访问 类属性

print(A.color)

但! 类对象 不能访问 实例对象

# print(A.size)

类方法

实例对象a1 访问 类属性

class A:  # 类对象
    color = 'yellow'  # 类属性
    #类方法 访问类属性
    def get_color(cls):
        return cls.color

a1 = A()
print(a1.get_color())

类方法访问类属性

@classmethod	#!!!!!不加 就会报错!!
    def get_color(cls):
        return cls.color

print(A.get_color())	#此处为类对象

可通过类方法修改类属性

@classmethod
    def change_color(cls,new):
        cls.color=new
     

A.change_color('red')

cls和self的区别:https://www.zhihu.com/question/49660420?sort=created

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值