zoukankan      html  css  js  c++  java
  • python 15篇 面向对象

    1.面向对象编程概念

    面向对象是包含面向过程


    面向过程编程

      买车:
        1、4s看车,买车
        2、上保险 保险公司
        3、交税 地税局
        4、交管所 上牌
    面向对象编程

      卖车处:
        1、4s
        2、保险
        3、交税
        4、上牌


      一个模型、一个例子

    实例/对象

      实例,通过模型来造具体的东西

    实例化

      把模型变成实例的过程

    构造函数

      类在实例化的时候,会自动执行

      __init__()

        def __init__(self, name, sex):
            # 构造函数,1.类在实例化时自动执行的函数 2.如果要使用这个类,必须要传一些参数
            self.name = name
            self.sex = sex
            self.birthday = time.time()
            self.cry()

    self
      本类对象

      self就是你实例化的那个变量

      self.xxx=xxx

      在别的函数里就直接可以用了

    析构函数

      实例被销毁的时候自动执行的函数

      __def__()

        def __del__(self):
            # 析构函数是实例被销毁的时候执行。比如关闭数据库的游标、数据库或关闭文件
            print('我是析构函数')

    私有

      不是公共的,只能在类里面调用,不能在类外面调用

      函数/变量以__开头,就是私有的

        def __close(self):  # __代表是私有的(可以用来限制变量或函数),只能通过self调用,不能用类名调用
            self.cursor.close()
            self.conn.close()

    2.面向对象编程小例子

    import traceback
    import pymysql
    from loguru import logger
    mysql_info = {
            'host': '118.24.3.40',
            'user': 'jxz',
            'password': '123456',
            'port': 3306,
            'db': 'jxz',
            'charset': 'utf8',
            'autocommit': True
        }
    class MySQL:
        def __init__(self,host,user,password,db,charset,autocommit=True):
            self.conn = pymysql.connect(user=user,host=host,password=password,db=db,charset=charset,autocommit=autocommit)
            self.cursor = self.conn.cursor()
        def __del__(self):  # 析构函数是实例被销毁的时候执行。比如关闭数据库的游标、数据库或关闭文件
            self.__close()
    
        def execute(self,sql):
            try:
                self.cursor.execute(sql)
            except:
                logger.error('sql执行出错,sql语句是{}', sql)
                logger.error(traceback.format_exc())
    
        def fetchall(self, sql):
            self.execute(sql)
            return self.cursor.fetchall()
    
        def fetchone(self, sql):
            self.execute(sql)
            return self.cursor.fetchone()
        def __close(self):  # __代表是私有的(可以用来限制变量或函数),只能通过self调用,不能用类名调用
            self.cursor.close()
            self.conn.close()
    
    if __name__ == '__main__':
        my = MySQL(**mysql_info)
        print(my.fetchone('select * from '))

    3.面向对象编程的其他知识点

    类方法

      类里面自带的方法,不用实例化就可以调用,想象,模型上自带的功能

      类方法是公共的,在实例方法里面可以随意调用

      但是在类方法里不能调用实例方法,不能使用实例变量,但是他可以调用其他的类方法

    @classmethod
        def putonghua(cls):  # 类方法不需要实例化就可以调用
            print(cls.country)
            print('会说普通话')
            # cls.name  # 不能调用实例属性

    类变量

      类在定义好的时候,就把这个变量定义好了,也是公共的

    class Person:
        country = 'China'  # 类变量,在定义类时,就已经在类里面了,使用类名.变量名调用

    实例方法

      实例化后才能调用的方法

    实例变量

      实例化后才能调用的变量

    属性方法

      看起来像变量的函数

     # 属性方法,使用property修饰器,不能有参数,必须有返回值
     @property
     def age(self):
        return int(time.time() - self.birthday)

    静态方法
      一个和类没有关系的方法,就是一个普通的方法,只是写在类里面而已

      不能调用实例方法,也不能调用类方法

    @staticmethod
    def suangua():
        print('静态方法,啥也干不了')

    继承

      子类继承父类公共的方法,也可以重写父类的方法

      父类的私有变量和私有方法不能继承

      重写:

        1.直接覆盖父类方法

        2.在父类的基础上添加新的功能

    class Lw:
        def driver(self):
            print('kaiche')
    
        def make_money(self):
            print('5000块钱')
    
    
    class Xw(Lw):
        # 重写,覆盖式
        def driver(self):
            print('开飞机')
    
        def make_money(self):  # 重写,在父类基础上做修改
            super().make_money()  # super():自动找父类
            print('再挣5000块钱')
  • 相关阅读:
    【QCon笔记】Native 和 Web 融合
    点透
    测试
    Moom for mac 最棒的窗口管理软件
    Egret白鹭H5小游戏开发入门(三)
    Egret白鹭H5小游戏开发入门(二)
    Egret白鹭H5小游戏开发入门(一)
    关于Canvas模糊的问题
    利用Canvas实现360度浏览
    JS中取整以及随机颜色问题
  • 原文地址:https://www.cnblogs.com/lhy-qingqiu/p/13789563.html
Copyright © 2011-2022 走看看