zoukankan      html  css  js  c++  java
  • 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))
    

      

  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/yezl/p/5806841.html
Copyright © 2011-2022 走看看