Python学习笔记Day04

包与模块管理

在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。

为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。

例如

import math #就是引入math这个模块
#我们就可以使用math这个模块下的变量 常量 还有函数
print(math.pi)
3.141592653589793

只引入一个成员变量的方法:from xxx(模块名) import xx(变量或函数)

举例

from math import  pi
print(pi)
3.141592653589793

对应的*可以引入所有成员变量及方法

from math import  *

避免重名

在这里插入图片描述
加入as

模块运行步骤及搜索优先级

在这里插入图片描述
注意:使用
搜索范围 自己写的优先
在这里插入图片描述

why

代码重用 命名空间 实现数据和服务共享

面向对象思想

常见概念:
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
类定义:

面向对象的三大特性:

1.继承:解决代码的复用性问题

2.封装:对数据属性严格控制,隔离复杂度

3.多态性:增加程序的灵活性与可扩展性

写一个类

class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
#print方法
    def __str__(self):
        return self.name
    def __repr__(self):
        return '学生'+self.name
student  = Student('小吴',12)
print(student)
小吴

类里面添加一个方法

class Student:
    def __init__(self,name,age,subject='信息工程'):
        self.name=name
        self.age=age
        self.subject=subject
#print方法
    def __str__(self):
        return self.name
    def __repr__(self):
        return '学生'+self.name
#方法定义
    def  getsubject(self):
        print(self.subject)
student  = Student('小吴',12)
student.getsubject()
        
信息工程

@property注解
    @property
    def  getsubject(self):
        return self.subject
student  = Student('小吴',12)
print(student.getsubject)
信息工程

继承

class member(Student):
    def __init__(self,name,age,subject,department='文学社'):
        Student.__init__(self,name,age,subject)
        self.department=department
    def getsubject(self):
        return '我的专业是'+self.subject
m = member('小王',12,'软件','美术社')
print(m.getsubject())
print(m)
我的专业是软件
小王

类的专有方法:
init : 构造函数,在生成对象时调用
del : 析构函数,释放对象时使用
repr : 打印,转换
setitem : 按照索引赋值
getitem: 按照索引获取值
len: 获得长度
cmp: 比较运算
call: 函数调用
add: 加运算
sub: 减运算
mul: 乘运算
truediv: 除运算
mod: 求余运算
pow: 乘方
在这里插入代码片

类常量的定义可以直接写在类里面,不用写在init里init针对实例化
这里的是针对这个类的变量
在这里插入图片描述
多态

def 父类:
	def 父类方法:
		pass或逻辑#定义标准

子类对父类方法重写
定义不同对象使用不同的方法,即多态

小结:

-----------------------------------------------分割线------------------------------------------------------------

函数,模块及方法

1. if name == ‘main’:
这段代码的功能
 一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的
原理

每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“main”等于当前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,name == 'main’结果为真。

系统变量        __name__ 注意下划线有两个

例如:
在model下执行
在这里插入图片描述
得到结果:
在这里插入图片描述
这时候将model.py作为模块导入到另一个文件中使用
在这里插入图片描述
在这里插入图片描述
结果:
111
参考于https://blog.csdn.net/zhusongziye/article/details/79505803

import importlib

考虑到性能的原因,每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,你必须重启程序,python不支持重新加载或卸载之前导入的模块.刚刚也在模块步骤调用中写过模块编译成字节码文件后,

运算符的优先级

** 优先级比 * 优先级要高
逻辑运算优先级
从左到右 not and or

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值