面向对象编程

面向对象编程

一、特点

  • 类与实例:类有属性和方法,实例用于调用
  • 封装:可以决定哪些属性和方法是可以访问的(public),哪些是受保护的(protected),哪些是私有的(private)
  • 继承:子类继承父类所有可访问的方法和属性
  • 多态:通常只有强类型编程语言(C#、C++、JAVA)才严格具备多态性,弱类型编程语言本身就体现为多态

二、示例

# 类名建议所有首字母大写
class Pepole:
    # 定义类属性
    course = '网络安全'
    # name = ''
    # age = 1
    # nation = ''
    # addr = ''

    #析构方法:用于释放内存空间时使用,当方法不再被使用就自动释放
    def __del__(self):
        print('实例空间正在释放')

    # 定义构造方法,实例化时会自动调用的方法,并且可以将实例变量(实例属性)定义于此
    # self形参:类实例的引用,必须放在类方法的第一个形参,可以自动一名称,但是建议使用self
    def __init__(self,name='张三',age=30,nation='汉',addr='北京'):
        # 定义实例变量
        self.name = name
        self.age = age
        self.nation = nation
        self.addr = addr

    # 定义类方法
    def talk(self):
        print('people在说话')

    def work(self,type):
        print(f'people在做{type}工作')

    # 静态方法:直接使用类名而非实例调用的方法,静态方法常驻的内存空间
    @classmethod         
    def teach(cls)                   # cls代表对类本身的引用
        print(cls.course)            # 类属性course用类的引用cls来调用

# 新建一个类Man,继承自people
class Man(People):
    # 重写父类的talk方法
    def talk(self):
        print('子类正在说话')

if __name__ = '__main__':
    # 基本的实例化及调用
    p1 = People()             # 类的实例化
    p2 = People()             # 不同的实例有不同的地址,类本身有一个地址
    p1.name = '张三'
    p2.name = '李四'
    p1.talk()

    # 通过构造方法进行实例化
    p = People()
    p = People('李四',20,'汉','南京')
    print(p.name)

    p.teach()                            # 类的静态方法,不建议使用实例进行调用
    people.teach()                       # 类的静态方法,直接使用类名调用

    # 子类Man的操作
    m = Man()
    m.talk()

三、数据库的操作类

import pymysql

class DB:
    def __init__(self,host='localhost',user='root',password='123456',database='learn',charset='utf-8',type='default'):
        self,conn = pymysql.connect(host=host,user=user,password=password,database=database,charset=charset)\
        self.cursor = None
        if type == 'default':
            self.cursor = self.conn.cursor
        elif type == 'dict':
            self.cursor = self.conn.cursor(DictCursor)
        else:
            raise Exception("参数type错误,只能为default或dict")

    def query(self,sql):
        self.cursor.execute(sql)
        result = self.cursor.fetchall()
        return result

    def updata(self.sql):
        try:
            self.cursor.exrcute(sql)
            self.conn.commit()
            print('更新成功')
        except:
            print('执行更新异常')

    def __del__(self):
        self.conn.close()

if __name__ = '__main__':
    db = DB()
    print(db.query('select * from user'))
上一篇
下一篇