文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python学习之面向对象【入门初级篇】

2022-06-04 18:35

关注

前言

最近在学习Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。

概述

python支持多种编程范式:面向过程、面向对象、面向切面(装饰器部分)等。 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

OOP思想

面向对象的基本哲学:世界由具有各自运动规律和内部状态的对象组成,对象之间相互作用和通讯构成了世界。 唯一性,世界没有两片相同的树叶,同样的没有相同的对象。 分类性,分类是对现实世界的抽象。 三大特性:封装、继承和多态

面向对象的三大特性:

一、封装

封装,对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用。

私有化:将类或函数中的某些属性限制在某个区域之内,外部无法调用。

Python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。

例如:


class ProtectMe(object): 
 def __init__(self):
 self.me = "qiwsir"
 self.__name = "kivi"
 
 def __python(self):
 print("I love Python.") 
 
 def code(self):
 print9"Which language do you like?")
 self.__python()
 
if __name__ == "__main__":
 p = ProtectMe()
 print(p.me)
 print(p.__name)
 
#运行结果
qiwsir
Traceback (most recent call last):
 File "21102.py", line 21, in <module>
 print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name' 

说明:__name属性隐藏了,无法调用。

调用私有属性,可以使用property函数


class ProtectMe(object): 
 def __init__(self):
 self.me = "qiwsir"
 self.__name = "kivi"
 
 @property
 def name(self):
 return self.__name
 
if __name__ == "__main__":
 p = ProtectMe()
 print(p.name)

#运行结果
 kivi 

所以,在使用面向对象的封装特性时,需要:

将内容封装到某处 从某处调用被封装的内容

第一步:将内容封装到某处

查看图片

self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1

当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

查看图片

第二步:从某处调用被封装的内容

调用被封装的内容时,有两种情况:

通过对象直接调用 通过self间接调用

class Role(object):
 ac = None #类变量
 def __init__(self,name,role,weapon,life_value):
 #初始化方法
 self.name = name #实例变量(成员变量)
 self.role = role
 self.weapon = weapon
 self.life_val = life_value
 
 def buy_weapon(self,weapon): #定义方法
 #self:表示实例本身
 self.weapon = weapon
 # print("%s is buying [%s]" %(self.name,weapon))
 
#把一个抽象的类变成一个具体的对象的过程,叫实例化
 
p1 = Role("sanjiang",'Police',"B10",90) #实例
t1 = Role("Chunyun",'Terrorist',"B11",100)

二、继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。


class SchoolMember(object):
 # member_nums = 0
 def __init__(self,name,age,sex):
 self.name = name
 self.age = age
 self.sex = sex
 # self.enroll()
 
 def enroll(self):
 SchoolMember.member_nums += 1
 print("SchoolMember [%s] is enrolled!" %self.name)
 
 def tell(self):
 print("Hello my name is [%s]" %self.name)
 
class Teacher(SchoolMember):
 def __init__(self,name,age,sex,course,salary): #重写父类的__init__方法
 super(Teacher,self).__init__(name,age,sex) #继承(新式类)
 # SchoolMember.__init__(self,name,age,sex) #继承(旧式类)
 self.course = course
 self.salary = salary
 
 def teaching(self):
 print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
 
 
 
class Student(SchoolMember):
 def __init__(self,name,age,sex,course,tuition):
 super(Student,self).__init__(name,age,sex)
 self.course = course
 self.tuition = tuition
 
 def pay_tuition(self):
 print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯