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

879次阅读  |  发布于5年以前

前言

最近在学习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 属性,在内存里类似于下图来保存。

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

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


    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))

总结

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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8