第三天实习报告
一、模块与包
1、定义:
模块是处理某一类问题的集合,模块由函数、类、变量组成。
包是由一系列模块组成的集合。包必须含有一个****init.py文件,用于标识当前文件夹是一个包。
2、模块的导入
格式:
import 模块名 [ as 别名]
from 模块名 import 函数名
from 模块名 import *
当在其他模块中import 的时候,只能导入被导入模块中_**all_变量规定的内容。
__all__ = ["color","country","greet","say"]# 当导入包所有的时候from 包名 import *,规定只有哪些内容可被导入
from mypackage.mymodule import *
greet = "Welcome to China~~~"
def say():
print("你好,我叫机器人~~~")
当from 包名 import *的时候,会去寻找该包的入口文件(***init.py), 则import 只能导入入口文件中__**all__规定的内容
3、time模块
time()函数返回1970年1月1日00:00:00AM以来的秒数
sleep()函数用来休眠指定的秒数
import time
start = time.time() # 开始计时
for i in range(1,100000):
pass # 啥也不干
end = time.time() # 结束计时
print("循环经过的时间(以秒算):",end-start)
for i in range(0,5):
print("i=",i)
time.sleep(1) # 休眠1秒
4、random模块
randint()函数在一个数字范围内随机挑选一个整数
choice()函数从一个列表或元组中随机选取一个元素
shuffle()函数给列表“洗牌”
import random
numbers = [1,2,6,8,4]
print(random.choice(numbers)) # 从序列中随机选择一个元素
print("洗牌之前:",numbers)
random.shuffle(numbers) # 对列表进行乱序处理
print("洗牌之后:",numbers)
二、面向对象的程序设计
1、类:
(1)、定义:使用class关键字来定义类,class关键字之后是一个空格,然后是类的名字,再然后是一个冒号,最后换行并定义类的内部实现。
class Person:
def __init__(self,name,money):
self.name=name
self.money=money
class rlation:
pass
per1=Person("wang","1200")
per2=Person("li","1000")
isinstance(per1,Person)
定义了类之后,可以用来实例化对象,并通过“对象名.成员”的方式来访问其中的数据成员或成员方法,可以使用内置函数isinstance()来测试一个对象是否为某个类的实例。
“pass”,类似于空语句,可以用在类和函数的定义中或者选择结构中。当暂时没有确定如何实现功能,或者为以后的软件升级预留空间,或者其他类型功能时,可以使用该关键字来“占位”。
(2)、属性
分为实例属性和类属性,实例属性是作为对象的属性,以self作为前缀的属性;类属性是在类内部定义的属性,可以被类中的所有实例共享
(3)、使用方法
类中的函数称为方法:实例方法、类方法、静态方法等
_init()方法:构造方法,用来初始化新创建的对象
@staticmethod装饰器把普通的函数转换为静态方法
@classmethod装饰器定义,被装饰器的方法把类对象作为第一个参数传递(习惯上使用cls)(类本身作为操作对象)
class Bank:
@classmethod
def save(cls,per,account):
print("存钱")
per.money+=account
print("结束")
@classmethod
def get(cls,per,account):
if Bank.check(per)>account:
per.money-=account
else:
print("余额不足")
@classmethod
def tranfer(cls,from_per,to_per,account):
if from_per.money>=account:
from_per.money-=account
to_per.money+=account
else:
print("余额不足")
@classmethod
def check(cls,per):
return per.money
(4)、继承
继承是为代码复用和设计复用而设计的,是面向对象程序设计的重要特性之一。
格式:
class 子类名(父类名):
pass
如果需要在派生类(子类)中调用基类(父类)的方法,可以使用super().xxx 来实现这一目的。
class Animal: # 作为父类
home = "地球"
def __init__(self,name,color):
self.name = name
self.color = color
def describe(self):
print("这是",self.name,";颜色是:",self.color)
class Dog(Animal): # Dog子类继承Animal父类
def __init__(self,name,color,food):
super().__init__(name,color) # 调用父类的构造方法,并传入两个参数
self.food = food
def describe(self): # 重写(重新实现)父类的describe方法
print("这是", self.name, ";颜色是:", self.color,";食物是:",self.food)
支持多重继承,即一个子类可以继承多个父类。语法为:
class_name(parent_class1,parent_class2…)
子类根据父类的顺序优先继承构造方法。
(5)、多态
子类对象可以替代父类对象,在同一个变量在调用不同的方法时,可能表现出多种行为,这种特性称为多态性。
(6)、运算符重载
运算符的重载可以实现对象之间新的运算
class Fruit:
def init(self,name,price):
self.name = name
self.price = price
class Fruit:
def __init__(self,name,price):
self.name = name
self.price = price
def __add__(self, other): # 重载加法运算符
return self.price + other.price
if __name__ == '__main__':
fruit1 = Fruit("A",12)
fruit2 = Fruit("A",8)
print("fruit1+fruit2的结果:",fruit1+fruit2)