zoukankan      html  css  js  c++  java
  • Python学习-从面向对象开始

    @

    面向对象

    类和实例

    面向对象编程(Object Oriented Programming)(OOP),是一种程序设计思想

    与之相对应的事面向过程编程(Procedure Oriented Programming)(POP) 两者区别如下:

    把大象放进冰箱需要几个步骤?

    1. 面向过程编程:
      打开冰箱、放进大象、关闭冰箱
    def open_icebox():
        print("open icebox")
    
    def close_icebox():
        print("close icebox")
    
    def put_elephant():
        print("put elephant")    
    
    if __name__ == "__main__":
        open_icebox()
        put_elephant()
        close_icebox()
    
    1. 面向对象编程:
      冰箱一个类,大象一个类,放的动作一个类
    class icebox():
        def __init__(self,size,brand):
            self.size = size
            self.brand = brand
        
        def open_icebox(self):
            print("open size:%d brand:%s icebox" % (self.size,self.brand))
    
        def close_icebox(self):
            print("close size:%d brand:%s icebox" % (self.size,self.brand)) 
    
    
    class elephant():
        def __init__(self,size,type):
            self.size = size
            self.type = type  
    
        def print_arr(self):
            print("elephant size is:%d type is:%s " % (self.size,self.type)) 
    
    class action():
        def __init__(self,action) -> None:
            self.action = action
        
        def start_action(self):
            if self.action == 'put':
                print('put')
            elif self.action == 'get':
                print('get')
    
    
    if __name__ == "__main__":
        icebox = icebox(100,'songxia')
        elephant = elephant(10,'yazhouxiang')
        action = action('put')
    
        icebox.open_icebox()
        action.start_action()
        elephant.print_arr()
        icebox.close_icebox()
    

    面向对象是以功能来划分问题,功能上的统一保证了面向对象设计的可扩展性。比如我想把大象取出,就只需要在动作类中添加取出的方法即可,并且可以更改冰箱的种类、大象的种类

    其中__init__方法的第一个参数永远是self,表示创建的实例本身,此方法有点类似与C++中的构造函数,比如一个人在出生时就携带了自身的属性,如人类、男性这样的属性,__init__方法就是在创建一个实例的同时,初始化一个自带的属性。

    访问限制

    类的最重要的属性之一就是封装,即从外部无法直接访问到类的属性

    与C++中类的关键字private关键字类似,python中也有类似的方法,如下在init方法中加上双下划线即可

    class icebox():
        def __init__(self,size,brand):
            self.__size = size
            self.__brand = brand
    

    此时如果想访问或更改类属性,就可以在类中定义相应的方法,通过类方法更改类属性,同时可以在方法中,可以对参数做检查,避免传入无效的参数

    继承和多态

    类的第二个特性-继承

    子类可以继承父类的所有方法,如果需要子类自己的方法,只需要在子类中重写父类的方法就会自动覆盖

    class elephant():
        def run(self):
            print("elephant is runing") 
    
    class asia_elephant(elephant):
        pass
    
    if __name__ == "__main__":
        elephant = asia_elephant()
        elephant.run()
    

    类的第二个特性-多态

    在如下代码中可以发现函数run_twice(elephant)中传入不同的实例对象时,其结果也随之变化,这就是多态

    class elephant(object):
        def run(self):
            print("elephant is runing") 
    
    class asia_elephant(elephant):
        def run(self):
            print("asia elephant is runing")
    
    class africa_elephant(elephant):
        def run(self):
            print("africa elephant is runing")
    
    if __name__ == "__main__":
        asia_elephant = asia_elephant()
        africa_elephant = africa_elephant()
    
        def run_twice(elephant):
            elephant.run()
            elephant.run()
        
        run_twice(asia_elephant)
        run_twice(africa_elephant)
    
    
  • 相关阅读:
    date之Hi时间的思考
    空循环比较 for foreach array_map array_walk
    ECSHOP 数据库结构说明 (适用版本v2.7.3)
    自定义写入读出文件作为存储的函数
    session 重写进入redis测试
    单独批次性任务采用MySQL定时器解决需求
    php 接收 Content-Type 是 application/json的请求数据
    centos 6.4 mysql rpm 离线安装【备忘】
    solr单机版安装与基本部署
    vim&vi在编辑的时候突然卡死,不接收输入问题的解决
  • 原文地址:https://www.cnblogs.com/cokefentas/p/14916866.html
Copyright © 2011-2022 走看看