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()
posted @ 2020-01-02 21:51  sowhat1943  阅读(145)  评论(0编辑  收藏  举报