面向对象

简介

面向对象简单来说,就是类的创建。
类就是对世界的实例的抽象(抽象就是把实例的共同特征保存在一个类中)(就比如动植物类)
实例就是类的具体化(具体化是划分为一个小的个体)(就比如狗,猫等)
在python世界中,万物皆对象,无处不对象。
在计算机的世界中,我们需要把现实世界中的抽象为计算机的世界,构造一个计算机的世界。

面向对象

类(class):用来描述具有相同属性和方法的集合。他定义了每个对象所共有的方法和属性
方法:类中定义的函数(实例都可以做的事情)
类变量:在类中定义的变量,为所有成员都有的属性
方法重写:如果从父类继承的方法不能满足子类的需求,可以对 父类的方法进行重写,这个叫做方法的覆盖(override)
局部变量:定义在方法中的变量,仅用与当前的实例
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。
继承也可以把一个派生类对象作为基类对象对待,也就是派生类对象和基类对象一样,可以调用基类的属性和方法
实例化:创建类的一个实例,类的具体对象
对象:通过类创建的实例,拥有类的属性和方法

继承的定义
python中一个派生类可以继承多个基类,并且派生类可以覆盖基类中的方法,继承多个基类的时候,可以用逗号隔开(,),当基类中有相同的方法的时候,按照从左到右的顺序

作用

实现良好的程序结构,方便程序的开发和维护
但是效率低

结构特色:
	高内聚(有关联的代码放一个代码块中)
	低耦合(没关联的放不同的代码块中)

类定义
要符合标识名命名规范

class ClassName:
属性
方法
可以通过类名访问其属性和方法(obj.属性)(obj.方法)

类对象
在类中的所有方法第一个参数传递的都是self,代表当前类的实例

class A:
		def speak(self):
				print('hello A')
a=A()
a.speak()
>>>hello A

在上面中a就是类对象
直接a.speak() 就是调用类的方法
类的构造方法
__init__在创建对象的时候自动调用

class A:
	def 	__init__(self,name):
				self.name=name
	def speak(self):
				print(self.name)
a=A('myname')
a.speak()
>>>myname

构造方法后面的参数需要在创建类的时候传入
私有属性
私有属性用双下划线定义(__属性)
私有方法也用双下划线定义(def __方法)

class A:
		name=''
		age=0
		__weight=0
		def __init__(self,name,age,weight):
					self.name=name
					self.age=age
					self.__weight=weight
		def speak(self):
					print(self.__weight)
					self.__prt()
					
		def 	__prt(self):
					print(self.name)
a=A('hhh',10,80)
a.speak()
>>>80>>>hhh
私有成员和方法只能在函数的内部调用
通过self.双下划线(方法)或(变量)就可以调用
注意私有方法不允许在类外面使用,可以在函数内部写方法使用
但是由于python是一门开源的语言,所以并没有完全的封装,还是可以通过obj._类__私有成员调用的

保护属性

在python类里面,单下划线的属性为受保护的,在类外面也可以使用,但是不推荐使用
class A:
	_a=10
a就是受保护的属性,在外面也可以调用的	

调用父类方法
在子类中重写了父类方法

class A:
     def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super().add(x)
b = B()
b.add(2)  # 3

python3中通过super().方法调用父类方法
python2中通过super(子类,self).方法

在这里插入图片描述

面向对象三大特性

一、封装

作用

把客观事物封装成抽象的类,并且类可以把自己的数据和方法让可信任的类或对象使用
优点:增强安全性和减少编
二、继承

作用

实现代码复用的特点,继承使现有类无需改变或添加代码的情况下扩展其他类的功能或数据
优点:提高了代码的复用率
三、多态

作用

多态:指一种事物的不同形态,对不同的人发送相同的信息有不同的反应
多态性:指不同功能的函数可以使用相同的函数名,统一操作于不同的对象,可以有不同的解释,产生不同的结果
(鸭子类型)
优点:消除类型之间的耦合关系
	可替换性
	可扩充性
	灵活性
	接口性
	简化性

继承

bug问题

class A:
	pass
class B(A):
	pass
class C(A):
	pass
class D(B,C):
	pass	
解释:当这样调用父类的方法时,会重复输出父类的方法,也就是输出了两次,为了解决这个问题
创建MRO(方法关系列表method relation order)
钻石继承(又叫菱形继承)
可以通过类名.__mro__		查看列表
或类名.mro()

原理

会把当前子类的父类编写成一个列表,取值的时候,按照列表的顺序取值,当继承多个的时候,
谁在前面就是类在列表中的顺序靠前,然后根据列表的顺序调用
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值