博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之路,day6-面向对象
阅读量:5309 次
发布时间:2019-06-14

本文共 5097 字,大约阅读时间需要 16 分钟。

一、面向过程编程

简单的说就是:如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,但是如果你要处理的任务比较复杂,且需要不断迭代和维护的,那还是用面向对象最方便了。

二、面向对象编程

class:类

一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法。

Object:对象

一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同

Encapsulation 封装

在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法

Inheritance 继承

一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承

Polymorphism 多态

态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。
编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。
对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽象的事物, 只要是员工就可以开始工作,他知道这一点就行了。至于每个员工,当然会各司其职,做各自的工作。
多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定

“类”例:

class Role(object):    def __init__(self,name,role,weapon,life_value=100,money=15000):        self.name = name        self.role = role        self.weapon = weapon        self.life_value = life_value        self.money = money     def shot(self):        print("shooting...")     def got_shot(self):        print("ah...,I got shot...")     def buy_gun(self,gun_name):        print("just bought %s" %gun_name) r1 = Role('liudong','police','AK47’) #生成一个角色r2 = Role('Jack','terrorist','B22’)  #生成一个对上面的代码进行解释:class Role(object): #定义一个类, class是定义类的语法,Role是类名,(object)是新式类的写法,必须这样写,以后再讲为什么
def__init__(self,name,role,weapon,life_value=100,money=15000): #初始化函数,在生成一个角色时要初始化的一些属性就填写在这里        self.name = name #__init__中的第一个参数self,和这里的self都 是什么意思? 看下面解释        self.role = role        self.weapon = weapon        self.life_value = life_value        self.money = money  r1= Role('Alex','police','AK47’) #生成一个角色 , 会自动把参数传给Role下面的__init__(...)方法
r2 
= 
Role(
'Jack'
,
'terrorist'
,'B22’)  
#生成一个角色
 
r1 
= 
Role(
'liudong'
,
'police'
,
'AK47’) #此时self 相当于 r1 ,  Role(r1,'liudong
','
police
','
AK47’)
r2 
= 
Role(
'Jack'
,
'terrorist'
,
'B22’)#此时self 相当于 r2, Role(r2,'
Jack
','
terrorist
','
B22’)
 

封装:

class Role(object):    a='liudong'    b='test'    def __init__(self,name,role,weapon,life_value=100,money=15000):        self.name = name        self.role = role        self.weapon = weapon        self.__life_value = life_value        self.money = money    def shot(self):        print("shooting...")    def life_status(self):        print("name:%s  weapon:%s  life_val:%s" % (self.name,                                                   self.weapon,                                                   self.__life_value                                                        ))    def got_shot(self):        print("ah...,I got shot...")    def buy_gun(self,gun_name):        print("%s just bought %s" % (self.name,gun_name))r1 = Role('liudong','police','AK47',)#生成一个角色r1.a=1r2 = Role('Jack','terrorist','B22',)#生成一个角色r2.b=2del r2.br2.got_shot()r2.buy_gun('ak47')print(r1.a,r2.a,r1.money,)print(r1.life_status())print(r1.b,r2.b)

继承:

class people():    def __init__(self,name,age):        self.name=name        self.age=age    def piao(self):        print("----------------")class man(people):    def piao(self):        people.piao(self)        print("%s is piaoing.........." % self.name)m1=man("hehe",22)m1.piao()

多集进程:

# py3-经典类和新式类都是-广度优先   py2-经典类是按-深度优先------新式类是按-广度优先class School(object):    def __init__(self,name,addr):        self.name=name        self.addr=addr        self.students=[]        self.staffs=[]    def enroll(self,stu_obj):        print("为学员%s 办理注册手续" % stu_obj.name)        self.students.append(stu_obj)    def hire(self,staff_job):        self.staffs.append(staff_job)        print("雇佣新员工%s" %staff_job.name)class SchoolMember(object):    def __init__(self,name,age,sex):        self.name = name        self.age=age        self.sex=sex    def tell(self):        passclass Teacher(SchoolMember):    def __init__(self,name,age,sex,salary,course):        super(Teacher,self).__init__(name,age,sex)        self.salary=salary        self.course=course    def tell(self):    def teach(self):        print("%s is teaching course [%s]" %(self.name,self.course))class Student(SchoolMember):    def __init__(self,name,age,sex,stu_id,grade):        super(Student,self).__init__(name,age,sex)        self.stu_id=stu_id        self.grade=grade    def tell(self):        print('''         ----------------------------------------------------        Name:%s        Age:%s        Sex:%s        Stu_id:%s        Grade:%s        ''' % (self.name, self.age, self.sex, self.stu_id, self.grade))    def pay_tuition(self,amount):        print("%s has paid tution for $%s"% (self.name,amount))school = School("老男孩IT","沙河")t1 = Teacher("Oldboy","56","M","20000000","linux")t2 = Teacher("刘东","23","M","100000000000","python")s1 = Student("张三","20","F","1001","pythonDevops")s2 = Student("李四","18","M","1002","linux")t1.tell()s1.tell()school.hire(t1)school.enroll(s1)school.enroll(s2)print(school.students)print(school.staffs)school.students[0].teach()for stu in school.students:    stu.pay_tuition(5000)

 

转载于:https://www.cnblogs.com/liuyansheng/p/5819092.html

你可能感兴趣的文章
tomcat 性能优化
查看>>
mysql数据库 高可用集群
查看>>
NGINX服务器
查看>>
ELK日志系统
查看>>
Redis
查看>>
LOCK TABLES和UNLOCK TABLES
查看>>
cssText()
查看>>
微信小程序里碰到的坑和小知识
查看>>
ITOO高校云平台V3.1--项目总结(二)
查看>>
Spring Java-based容器配置
查看>>
android launcher2开发之 有抽屉改成无抽屉
查看>>
Android App补丁更新
查看>>
混用Int与IntPtr导致GetProcAddress始终返回null
查看>>
第四次网络原理笔记
查看>>
mac笔记本怎样显示隐藏的文件
查看>>
关于socket通讯,如何才能高效?
查看>>
NPOI导Excel样式设置
查看>>
webp图像批量转换软件推荐——XnConvert
查看>>
PHP session用redis存储
查看>>
hdu1232畅通工程 并查集
查看>>