Python学习第七天--面向对象编程

1、 包与模块管理以及面向对象初步认识

  什么是模块呢? 答:把一些功能逻辑写到一个后缀名为py的文件里面,我们就成为这个文件为一个脚本,或者是一个模块。那么我们使用的原因是什么? 1、 代码重用 2、命名空间  3、实现数据的共享!

 模块与模块之间是可以相互调用的!这时候我们需要使用三个关键字:

1、import 关键字 , 将想要使用的模块   :    import 模块名  导入到目前的模块中!然后使用“模块名,”的形式来进行调用该模块的方法就行。

2、  from 关键字 :当你想要使用另外的模块的其中的一个属性的时候,我们就需要使用form关键字了!比如 from 想要使用的模块名   import  想要使用的模块中的变量 。 或者*  是导入所有。  

       如果在两个模块中有重名的方法,我们饿怎么办呢?要么使用模块名点方法的方式指定! 要么就使用“from 模块名  import 方法名 as 别名” , 通过起别名的形式来指定不同的模块中相同的名字 的不重复的调用。
   

模块执行的步骤:

       1.、找到模块的文件!
       2、将模块编译成为字节码文件!
       3.、运行模块文件! 

模块的搜索范围,比如一个math模块的使用的时候的顺序: 1、当前程序的主目录,2、找环境变量里面   3、找标准库中的!  4、扩展库中找!

 

注意:当我们在一个模块一中已经写好了两个方法,然后模块二导入以后使用模块一! 这个时候,模块一中又修改了这个方法,增加了新功能!这个时候模块二还要重新启动! 如果改动的多了!很是麻烦!

        这时候我们的标准版库中已经考虑到这个问题了! 有一个专门负责导入的这种问题的!  叫  import  importlib  这个库里面! 里面有一个方法 叫 importlib.reload(模块名)   这个的意思就是!他已经将模块的信息加进去了! 但是importlib只能以为模块为单位。

包的概念:

     包就是创建的文件夹,我们在里面使用py文件,统一管理! 当需要导入这个包下面的某一个模块的时候! 只需要:
       import 包名.类名   就可以了!   当我们在使用创建了包的时候,会在这个包下面出现一个__init__的py文件,这个文件就是使用这个文件的时候,初始化用的! 就是谁要是使用这个包,肯定会先初始化里面的代码! 这个东西只在第一次执行的时候被调用! 

 

面向对象的概念:

   封装的主要目的就是:最高程度上提高代码的重用性,最小限度的降低代码的冗余!

#coding=gbk

title  = 'python入门'
price = 39.00
autor =  'Perter'

def search_book(title):
    print('搜索包含书关键字{}的图书'.format(title))

book = {
    'title':'Python入门',
    'price':39.00,
    'author':'Perter',
    'search_book':search_book
}
print(book['title'])
print(book.get('price','没有价钱'))
book.get('search_book')('python')

上面的book就是一个面向对象的例子!使用字典表来完成。

学好面向对象编程的三要素:
1、分析对象(抛开代码):OOA(面向对象分析)。就是把你关心的东西列出来,万物皆对象,不管是看的见的看不见的但是能被人感知的东西,将对象的我们需要关注的特征定义出来!如果有多个对象! 就把这些对象一一的列举出来。然后屡清楚这几个对象之间的关系。哪个可以成为父类了~之类的

2、类定义对象代码模块(蓝图):OOD(面向对象设计)java中是class关键字! 各个语言都相差不大!

3、实例化(内存对象):OOP面向对象编程

上面的三步是我们的概念:下面三步是实现:

1、分析对象的特征和行为
2、写类描述对象的模板! 
3、实例化,模拟过程:
接下来看一下具体的例子:

#coding=gbk
import datetime
# __init__是称之为构造函数,初始化类成员用的!
#当我们在类中定义函数的时候总是会被默认加上一个self,这句话的
#的意思就是:这句话需要你new出来的这个实例去调用 。
#当然这个也是可以去掉!也是可以修改的!但是这是我们在最后有需求的时候才会去修改的

# self 后面跟的参数! 那些都是一些默认值!就是当我们的参数没有传值的时候,就会默认使用的这个值,
#注意:这里有个现象,就是我们在当前参数赋予默认值以后,后面的参数都必须赋予默认值。
class Book:
    def __init__(self,title,price = 0.0,author='',publisher=None,pubdate=datetime.date.today()):
        self.title = title
        self.price = price
        self.author = author
        self.publisher = publisher
        self.pubdate = pubdate
    def print_info(self):
        print('当前这本书的信息如下:')
        print('标题:{}'.format(self.title))
        print('定价:{}'.format(self.price))
        print('作者:{}'.format(self.author))
        print('出版者:{}'.format(self.publisher))
        print('出版时间:{}'.format(self.pubdate))
book1 = Book('C#经典',29.9,'Tom','梦想秀',datetime.date(2018,11,26))
book1.print_info()

book2 = Book('Python 入门精通')
book2.print_info()  #没有定义的会使用默认值

注意看注释啊!!!!!!! 下面是输出的结果!可以看出来没有定义的使用了默认值

E:\python\python.exe E:/pythonstudy/pycharm/test/Day16/main.py
当前这本书的信息如下:
标题:C#经典
定价:29.9
作者:Tom
出版者:梦想秀
出版时间:2018-11-26
当前这本书的信息如下:
标题:Python
定价:0.0
作者:
出版者:None
出版时间:2018-11-26

请注意:当我们在命令式交互符上面输入这个类的时候,会出现这个类所在内存的地址值! 那么我们现在有一个需求:
     就是在交互式命令提示符上面输入这个类的时候,直接打印该类的内容而不是地址值应该怎么做呢! 很简单!我们只需要使用默认的 __repr__(self):  return ‘<图书 {}>.format(self.title)’  这样我们在使用直接查看book的时候就会默认出现这行代码!


               
    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值