14面向对象
2023/4/14 11:22:02
本文主要是介绍14面向对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
面向对象
面向对象编程介绍
面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。
需要注意的是,与之对应的是面向过程编程思想。实际上,能够使用面向对象编程思想实现的程序,也都能通过面向过程完成。只是看哪种思想更适合当前开发需求。
面向过程与面向对象区别
面向过程:根据业务逻辑从上到下写代码
面向对象:将数据与函数绑定到一起,进行封装。减少重复代码的重写过程
类和对象
- 类:具有同一特征的事物,是抽象的,不是真实存在的。用来描述具有相同属性和方法的对象的集合。
- 对象:某一个具体事物的存在,在现实世界中可以是看得见摸得着的。
注意:开发中,先有类,再有对象。
类的构成
类由3个部分构成
- 类的名称:类名
- 类的属性:一组数据
- 类的方法:允许对类进行操作的方法
注意:类名通常采用驼峰式命名方式,尽量让字面意思体现出类的作用。
# 类的定义 class 类名称: 类的属性(成员变量) 类的行为(成员方法)
创建对象
python中,可以根据已经定义的类去创建出一个个对象
创建对象的格式为:
# 创建类对象的语法 对象 = 类名称()
类与对象的使用
# 定义 class 类名: def 方法名(self,参数): # 类中函数:称为方法 pass # 执行 s = 类名() # 创建对象(实例) 这个过程就是实例化 s.方法名(参数) # 调用类中方法
self参数
在类当中定义方法时,会发现系统帮我们自动创建了self参数,并且在调用对象的该方法时,也无需传入self参数。
self的两个概念:
- self本身是形参
- self就是当前对象本身
class Student: def printinfo(self): print(lisi.name, lisi.age) print(self.name, self.age) # 这里会高亮,对象的属性是暴露在外面的 print(lisi) print(self) lisi = Student() # 对象 # 对象的属性是暴露在外面的 lisi.name = '李四' lisi.age = 38 lisi.printinfo() """ 李四 38 李四 38 <__main__.Student object at 0x000002E5A099B208> <__main__.Student object at 0x000002E5A099B208> 说明在类中printinfo()方法中,lisi和self是等价的 """
魔法方法
在Python的类中,以两个下划线开头、两个下划线结尾的方法,如常见的 :__init__()、__str__()、__del__()等,就被称为「魔术方法」(Magic methods)。之所以会叫魔法方法原因是这些方法都是到达某个条件自动触发,无需调用,如果希望根据自己的程序定制特殊功能的类,那么就需要对这些方法进行重写。使用这些「魔法方法」,我们可以非常方便地给类添加特殊的功能。
__init__()
_init_() :初始化对象
class My_Phone(): def __init__(self): self.width = 10 self.heigth = 15 def main(self): print(self.width) print(self.heigth) apple = My_Phone()
_init_() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
_init_(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。
- 带参数的init
⼀个类可以创建多个对象,对不同的对象设置不同的初始化属性,传参即可。
class My_Phone(): def __init__(self,width,heigth): self.width = width self.heigth = heigth def apple_phont(self): print("苹果手机的宽为:",self.width) print("苹果手机的高为:",self.heigth) def huawei_phont(self): print("华为手机的宽为:",self.width) print("华为手机的高为:",self.heigth) apple = My_Phone(10,20) apple.apple_phont()
_str_()
当使⽤print输出对象的时候,默认打印对象的内存地址。如果类定义了 str ⽅法,那么就会打印在这个⽅法中 return 的数据。
_str_():解释类的属性或作用
class Demo(): def __init__(self, width, heigth): self.width = width self.heigth = heigth def __str__(self): return f"你这个手机的宽是{self.width},高度是{self.heigth}" a = Demo(10,20) print(a) # 你这个手机的宽是10,高度是20 # 若没有__str__()方法,则会打印对象的内存地址:<__main__.Demo object at 0x000001E6FC7A7198>
_del_()
当删除对象时,python解释器也会默认调⽤ __del__() ⽅法。在对象销毁的时候被调用,当对象不再被使用时,del()方法运行:
class Demo(): def __init__(self, width, heigth): self.width = width self.heigth = heigth def __del__(self): print("对象已经删除") a = Demo(10,20) # __del__方法 class Demo: def __del__(self): # 当由该类创建的实例对象,被删除或者说在内存中被释放,将会自动触发执行。 print("被释放了!") d = Demo() print("*" * 20) # del d # 相当于提前执行了del方法 print("*" * 20)
类属性与方法
类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问
class Demo(): __num = 0 # 私有属性 result = 0 # 公开属性 def count(self): self.__num += 1 self.result += 1 print(self.__num) def getnum(self): return self.__num run = Demo() run.count() print(run.result) # print(run.__num) # 报错,实例不能访问私有变量 __num = run.getnum() print(__num)
类的私有方法
class func: def fun1(self): print("1") def __fun2(self): print("2") def fun3(self): return (self.__fun2()) f = func() f.fun1() # f.__fun2() f.fun3() # 强行调用类的私有方法 # 对象._类名__私有属性 print(f._func__fun2) # 不建议使用
python中没有真正意义上的私有
实例属性
# 实例属性 class Province: def __init__(self, country, province): self.country = country self.province = province def print_info(self): print(self.country, self.province) # 通过self去访问 这个要方便很多 print(zs.country, zs.province) # 通过每个对象去访问 zs = Province("中国", "湖南") zs.print_info() ls = Province("中国", "湖北") ls.print_info()
实例方法
class Demo: def __init__(self): self.name = "张三" # 实例方法 def fun1(self): print(self.name) a = Demo() a.fun1()
这篇关于14面向对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解