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块钱')
原文地址:https://www.cnblogs.com/lhy-qingqiu/p/13789563.html