zoukankan      html  css  js  c++  java
  • 面向对象之基本概念 封装、单多继承

    面向对象:类,对象
    函数写在类里面,一定要加self
    例:

    class foo:
    	# 函数在类里面-->方法
    	def mail(self, email, message):
    		return Ture
    		
    # 调用
    # 1. 创建对象,类名(),例如:obj = foo()
    # 2. 通过对象去执行方法,例如:obj.mail()
    

    类和对象

    1. 创建类
    class 类名:
    	def 方法名(self,xxxx):
    		pass
    
    1. 创建对象
      对象 = 类名()
    2. 通过对象执行方法
      对象.方法名()
    3. 对象是由类创建的,对象执行方法,根据类对象指针进入对象找到方法
    4. self怎么理解
      self是一个python会自动传递的参数
      哪个对象执行方法,self就是谁
    5. 构造方法
      类中有一个特殊的方法__init__,类()-->类名加括号<--自动被执行
    6. 面向对象三大特性
      封装,继承,多态
      • 封装在对象里面,如模拟人生设计中,人物基本信息(姓名、年纪等)封装在self中。
      • 多态在python中用不到

    6--实例

    class SQLHelper:
        def __init__(self, a1, a2, a3):
            print("自动执行init")
            # 以下进行封装
            self.hhost = a1
            self.uusername = a2
            self.pwd = a3
    
    
        def fetch(self, sql):
            pass
        def crear(self, sql):
            pass
        def remove(self, id):
            pass
        def modify(self, name):
            pass
    
    # obj1 = SQLHelper()  # 加括号自动执行__init__方法,同时self为obj1
    obj1 = SQLHelper("a.com", "jack", 123)  # 进行self封装  构造了方法,创建对象的过程--利用__init__构造方法
    obj1.fetch("select xxxx")  # 进行调用
    # obj2 = SQLHelper()  # 加括号自动执行__init__方法,同时self为obj2
    

    什么时候用面向对象

    当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可。

    在类中,无上下顺序,可以提点调用

    7--多层封装实例:

    class c1:
    
        def __init__(self, name, obj):
            self.name = name
            self.obj = obj
    
    class c2:
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def show(self):
            print(self.name)
            return 123
    
    class c3:
        def __init__(self, a1):
            self.money = 123
            self.aaa = a1
    
    
    c2_obj = c2('aa', 11)
    # c2_obj是c2类型 封装了 name age
    # - name = "aa"
    # - age = 11
    c1_obj = c1("alex", c2_obj)
    # c1_obj.obj.name-->c2中的年纪 就是c1_obj.obj==c2_obj
    # c1_obj 是c1 类型
    # - name = "alex"
    # - obj = c2_obj
    c3_obj = c3(c1_obj)
    # 使用c3_obj执行show方法
    ret = c3_obj.aaa.obj.show()
    print(ret)
    

    多层封装实例图解如下:

    继承实例1:(继承<==>将父类中的方法复制到子类中)

    class F1: # 父类,基类
        def show(self):
            print('show')
    
        def foo(self):
            print(self.name)
    
    class F2(F1): # 子类,派生类
        def __init__(self, name):
            self.name = name
    
        def bar(self):
            print('bar')
        def show(self):
            print('F2.show')
    
    obj = F2('alex')
    # obj.show()
    obj.foo()  # 打印出alex  继承父类的方法,相当于父类的方法写入子类中
    

    继承实例2:

    面向对象之多继承

    左侧优先级高于右边,从左侧逐渐向父类查找,找到底再从右侧寻找
    多继承实例:


    寻找方法 都是从自己先查找,首先查找init方法
    例子:

  • 相关阅读:
    VUE-路由配置及跳转方式
    VUE使用axios请求后端数据
    springboot图片/文件上传
    java中return;语句的作用
    使用maven搭建ssm框架环境
    Java和Tomcat安装教程
    安装tomcat出现的问题
    关于 == 和 equals() 的区别
    关于从request对象中获取路径的问题
    栈和队列_leetcode20
  • 原文地址:https://www.cnblogs.com/qpzm/p/6077189.html
Copyright © 2011-2022 走看看