zoukankan      html  css  js  c++  java
  • Python之面向对象

    (一)包和模块的管理

    模块:模块可以理解为一个.py文件

    包:一个包包含多个目录(可以看做一个特殊的目录)

    ​ 包下边有个_init_.py模块,只有在包被第一次导入时才会被调用

    主要几个关键字:

    import:导入某个包

    import math
    

    from:从某个包中导入某个变量或方法-

    from models import page 【as 别名】
    

    导入的步骤:

    (1)找到模块文件

    • 首先从当前程序的主目录
    • 环境变量
    • 标准库
    • 扩展库

    (2)编译文件为字节码

    (3)运行字节码

    专门用于处理调入的模块importlib(只能导入模块

    import importlib
    importlib.reload(models)
    

    (二)面向对象

    面向对象的步骤:

    1. 面线对象分析OOA
    2. 面向对象设计OOD
    3. 面向对象编程OOP

    面向对象的实现:

    1. 分析对象的特征和行为
    2. 写类描述对象末模板
    3. 实例化,模拟过程

    封装

    • 构造函数
    • 静态成员
    • 静态方法
    import datetime
    
    
    class Book:
        count = 0
    
        def __init__(self,title,price,author,publisher,pubdate):
            self.title = title
            self.price = price
            self.author = author
            self.publisher = publisher
            self.pubdate = pubdate
            Book.count += 1
    
        def print_info(self):
            print('标题:{}'.format(self.title))
            print('价格:{}'.format(self.price))
            print('作者:{}'.format(self.author))
            print('出版社:{}'.format(self.publisher))
            print('出版日期:{}'.format(self.pubdate))
    
        def __repr__(self):
            return '<图书:{}>'.format(self.title,id(self))
    
        def __str__(self):
            return '<图书:{} at {}>'.format(self.title,id(self))
    
        def __del__(self):
            Book.count -= 1
    
        # 虽然是static,但是调用的时候也必须传入类的实例对象
        def cls_method(cls):
            print('类函数')
    
        #  调用时不用传入类的实例对象,注意对象不能调用该方法
        def cls_method1():
            print('静态函数与实例无关')
    
        #  调用时不用传入类的实例对象,对象也调用该方法
        @staticmethod
        def cls_method2():
            print('静态函数与实例无关')
    
    
    book1 = Book('Python',123.0,'Tom',' QINGHUA',datetime.date(2019, 1, 1))
    book1.print_info()
    print(book1)
    print('===================================')
    book2 = Book('Java',123.0,'Tom',' QINGHUA',datetime.date.today())
    book2.print_info()
    print(book2)
    print('Book.count = {}'.format(Book.count))
    del(book2)
    print('Book.count = {}'.format(Book.count))
    print('===================================')
    print(book1.count)
    book1.count = 10
    print(book1.count)
    print(Book.count)
    Book.cls_method(book1)
    Book.cls_method1()
    book1.cls_method2()
    
    ------------------------------------------------------------------------
    标题:Python
    价格:123.0
    作者:Tom
    出版社: QINGHUA
    出版日期:2019-01-01
    <图书:Python at 2384219167656>
    ===================================
    标题:Java
    价格:123.0
    作者:Tom
    出版社: QINGHUA
    出版日期:2020-01-03
    <图书:Java at 2384219167768>
    Book.count = 2
    Book.count = 1
    ===================================
    1
    10
    1
    类函数
    静态函数与实例无关
    静态函数与实例无关
    

    属性

    class Student:
        def __init__(self,name,birthdate):
            self.name = name
            self.birthdate = birthdate
    
        @property
        def age(self):
            return datetime.date.today().year-self.birthdate.year
    
        @age.setter
        def age(self,value):
            raise AttributeError("禁止赋值年龄")
    
        @age.deleter
        def age(self):
            raise AttributeError("禁止删除年龄")
    
    

    继承、多态

    import datetime
    
    
    class Employee:
        def __init__(self,department,name,birthdate,salary):
            self.department = department
            self.name = name
            self.birthdate = birthdate
            self.salary = salary
    
        def __str__(self):
            return '<员工:{}>'.format(self.name)
    
        @property
        def age(self):
            return datetime.date.today().year - self.birthdate.year
    
        def working(self):
            print('员工{}在工作'.format(self.name))
    
    
    class Programmer(Employee):
        def __init__(self,department,name,birthdate,salary,specility,project):
            super().__init__(department,name,birthdate,salary)
            self.specility = specility
            self.project = project
    
        def working(self):
            print('程序员{},在开发项目:{}'.format(self.name,self.project))
    
    
    class HR(Employee):
        def __init__(self,department,name,birthdate,salary,qualification_level=1):
            Employee.__init__(self,department,name,birthdate,salary)
            self.qualification_level = qualification_level
        
        def working(self):
            print('HR{},正在面试新员工'.format(self.name))
    p = Programmer('技术部','Tom',datetime.date(1993,12,2),10000,'Python',"大数据")
    print(p.age)
    
    hr = HR('HR','Tom',datetime.date(1993,12,2),10000)
    #多态:
    hr.working()
    p.working()
    
  • 相关阅读:
    NFramework开源AOP框架设计文档
    gdi+学习笔记(1)
    winform 二进制图片处理
    电脑屏幕分辨率多少合适
    c# winform AutoScaleMode属性 转
    Windows server 2008,Windows server 2008 R2,Windows 2008 SP2 区别
    视频分辨率
    ref和out(MSDN)
    转DirectX、Directshow介绍
    shell 命令的使用
  • 原文地址:https://www.cnblogs.com/gdy1993/p/12142214.html
Copyright © 2011-2022 走看看