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

      

  • 相关阅读:
    linux mint 17编译android 2.3.1错误记录
    android字母索引实现ListView定位
    android实现emoji输入
    shell管道与重定向
    c3p0配置记录
    ubuntu13 eclipse菜单栏失效解决
    Proxy实现java动态代理
    ubuntu13启动屏幕亮度0解决方法
    cookie和session笔记
    linux mysql中文乱码解决
  • 原文地址:https://www.cnblogs.com/yezl/p/5806841.html
Copyright © 2020-2023  润新知