建设网站预期效果怎么写,wordpress网站微信登录,郉台网站建设,英语营销型网站建设前言
学习了这么久Python#xff08;呃其实也没多久差不多两周#xff09;#xff0c;可能有小伙伴说我废了#xff0c;两周才学这么点#xff0c;咋说呢#xff0c;我曾经也是急于求成#xff0c;做任何事情都是急于求成#xff0c;比如我喜欢一个人我就想马上跟她在…前言
学习了这么久Python呃其实也没多久差不多两周可能有小伙伴说我废了两周才学这么点咋说呢我曾经也是急于求成做任何事情都是急于求成比如我喜欢一个人我就想马上跟她在一起我学习Java为了拉进度并没有做笔记学习MySQL高级的内容比如主从复制和它的底层原理这些也是没有做笔记学习Linux也是没有做笔记。很后悔所以我才开始写下博客当然这只是写博客的一部分原因。还有一些原因是我想在互联网上发疯反正也没有人认识我是谁哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
回归正题面向对象无论是Java还是C这一点都是很重要的一点Python虽然是一个解释性语言但是在设计之初就是面向对象而设计的。
对于初学一门编程语言的同学就会问啦什么是面向对象呀
答面向你的男/女朋友编程 即为面向对象 \(^o^)/~ 疯狂手动俏皮 面向对象是一种程序设计思想它将程序中的数据和操作数据的方法组合成一个对象通过对象之间的交互来实现程序的功能。面向对象的程序设计思想主要包括封装、继承和多态三个方面。
封装使得对象的内部实现对外部隐藏只有通过公共接口才能访问对象的属性和方法从而保证了对象的安全性和可靠性。继承让子类可以复用父类的属性和方法并且可以在子类中新增或重写父类的属性和方法从而简化了程序的设计和维护。多态则使得同一个方法可以具有多种不同的行为增加了程序的灵活性和可扩展性。
这一章主要有以下内容 1.初识对象 2.成员方法 3.类和对象 4.构造方法 5.其他内置方法 6.封装 7.继承 8.类型注解 9.多态 10.综合案例 GOGOGO!!!!! 1.初识对象 代码示例
初识面向对象# 1.设计一个类类比生活中设计一张登记表
class Student:name Nonesex Nonenationality Nonenative_place Noneage None
# 2.创建一个对象类比生活中打印一张登记表
stu_1 Student()
# 3.对象属性进行赋值类比生活中填写一张登记表
stu_1.name 瓦坎达
stu_1.sex 男
stu_1.nationality 地球瓦坎达
stu_1.native_place 地球
stu_1.age 19
# 4.获取对象中记录的信息
print(stu_1.name)
print(stu_1.sex)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)2.成员方法
1成员方法的概念
通过上面的你已经了解了如何使用了那么就来系统的了解一下吧 类里面包含两个东西 属性我们在上面已经见识过了
那么类里面的属性又是什么呢 也就是类里见提供的函数方法了
也就是》》成员方法
2成员方法的创建
那么该如何来创建成员方法呢、
和我们曾今创建方法的方式差不多但是有一个小差别 注意传参时可以当做self并不存在不必理会
3代码示例
成员方法
# 定义一个带有成员方法的类
class Student:name Nonedef say_hi(self):print(f大家好我是{self.name},o(*▽*)ブ)def say_hello(self, msg):print(f大家好,我是:{self.name},{msg})stu Student()
stu.name lyystu.say_hi()stu2 Student()
stu2.name wgg
stu2.say_hello((*´▽)ノノ) 3.类和对象
这里来深刻的体会一下面向对象的思想 类是图纸对象是实现
代码实现
体会面向对象编程import winsound# 设计一个闹钟类
class Clock:id Noneprice Nonedef ring(self):winsound.Beep(2000, 3000)clock1 Clock()
clock1.id 001
clock1.price 812
clock1.ring()print(f闹钟id:{clock1.id}价格{clock1.price})clock2 Clock()
clock2.id 002
clock2.price 313
clock2.ring()
print(f闹钟id:{clock1.id}价格{clock1.price})4.构造方法
1使用构造方法
构造方法还是挺简单的简化了赋值操作
其实这里的self学到这里就可以发现和Java里面的 this关键词有点类似了 演示构造方法
构造方法的名称为__init__
class Student:# 这里写不写无所吊谓name Nonesex Noneage Nonedef __init__(self, name, sex, age):self.name nameself.sex sexself.age ageprint(fstudent类创建了一个类)stu Student(lyy, 男, 19)
print(stu.name)
print(stu.age)
print(stu.sex)
2练习案例学生信息录入 代码示例
练习案例学生信息录入class Student:name Noneage Noneaddress Nonedef __init__(self, name, age, address):self.name nameself.age ageself.address addressprint(f学生信息录入完成【姓名:{name},年龄:{age},地址{address}】)# 共需要录入10个学生
stu_num int(input(请输入共需要录入多少学生))for stu in range(1, stu_num 1):stu_name input(请输入学生姓名)stu_age input(请输入年龄)stu_address input(请输入地址)stu Student(stu_name, stu_age, stu_address) 5.其他内置方法魔术方法
1__str__字符串方法 但是哈 咋说呢我只能说和Java的toString( )方法是差不多的 2__lt__小于、大于符号比较 3__le__小于等于、大于等于符号比较 4__eq__ 符号比较 5总结 演示其他的内置方法
class Student:def __init__(self, name, age):self.name nameself.age age# 1__str__字符串方法def __str__(self):return fname:{self.name},age:{self.age}# 2__lt__小于、大于符号比较def __lt__(self, other):return self.age other.age# 3__le__小于等于、大于等于符号比较def __le__(self, other):return self.age other.age# 4__eq__ 符号比较def __eq__(self, other):return self.age other.agestu1 Student(lyy, 18)
stu2 Student(wgg, 19)
stu3 Student(GO, 19)
print(stu1 stu2)
print(stu1 stu2)
print(stu2 stu3) 6.封装 面向对象三大特性 封装、继承和多态 1封装 2私有成员
相比于Java的区别这里私有成员的定义是使用 __ 两个下划线 而不是private 3使用私有成员
其实 私有成员也就是只能给“自己人”用
曾今的方法显然是不管用的那么 如何使用私有成员呢? 代码示例
演示私有成员
class Phone:__current_voltage 0.1 # 运行电压def __keep_single_core(self):print(cpu单核运行)def call_by_5G(self):if self.__current_voltage 1:print(5G通话已开启)else:self.__keep_single_core()print(电量不足节能模式)phone Phone()
# phone.__keep_single_core 用不了
# phone.__current_voltage 也用不了phone.call_by_5G()4练习案例设计带有私有成员的手机 参考代码
设计带有私有成员的手机
class Phone:__is_5g_enable Falsedef __check_5g(self):if self.__is_5g_enable True:print(5g开启)else:print(5g关闭使用4g信号)def call_by_5g(self):self.__check_5g()print(正在通话中)def open_or_down_5g(self):是否开启5g:return:str input(你是否要开始y/n)if str y:self.__is_5g_enable Trueelse:self.__is_5g_enable Falsephone Phone()
phone.open_or_down_5g()
phone.call_by_5g()7.继承
如何理解继承
答
继承是面向对象编程中的一个概念它指的是一个新类子类可以从现有的类父类继承属性和方法。在继承中父类中存在的公共属性和方法可以被子类直接使用子类也可以根据需要重写父类中的方法或添加新的属性和方法。
继承可以帮助程序员重用已有的代码和类避免重复的编写和维护。继承也可以实现代码的扩展和灵活性子类可以在不改变原有功能的基础上增加新的功能。
继承的实现方式可以通过关键字extends来实现子类可以继承父类的属性和方法并且可以调用父类的构造器来初始化子类的对象。在Java中一个子类只能继承一个直接父类但是可以通过多级继承从祖先类中继承属性和方法。
1单继承
相比于Java的继承方法采用extend关键词这里只需要将父类作为参数传入即可 2多继承
这里就发现了又一个和Java 的区别了Java是不支持多继承的而Python是支持的 注意事项
谁先继承谁的优先级更高 3复写
其实就是相当于Java的重写 4调用父类同名成员 8.类型注解
Python 3.5引入了一种类型注解机制即PEP 484它使开发者可以在函数参数和函数返回值中注明变量类型。类型注解可以帮助开发者更好地理解代码并提高代码的可读性和可维护性。
类型注解在Python中并不会严格检查类型也不会影响程序运行。它仅仅是给开发者提供了一种规范和提示让开发者更好地编写代码。
示例如下 def add_numbers(a: int, b: int) - int:return a b在这个例子中我们使用类型注解来告诉函数参数a和b应该是整数类型函数返回值也应该是整数类型。当然如果我们在调用add_numbers函数时传入的参数类型不是整数Python解释器也不会报错。但是通过类型注解我们可以清楚地知道这个函数的参数和返回值类型应该是什么。
我对于这个的理解是她想约束类型但是还是算了所以相当于给出一个规范你可以遵守也建议你遵守
1变量的类型注解
1.普通变量 2.容器 3.在注释中进行类型注解 4.限制 代码示例
演示变量的类型注解import json
import random# 基础数据类型注解
var1: int 12
var2: str lyy
var3: bool True# 类对象类型注解
class Student:passstu: Student Student()# 基础容器类型注解
my_list: list [1, 2, 3]
my_tuple: tuple (1, 2, 3)
my_dict: dict {lyy: 812}
# 容器类型详细注解
my_list: list[int] [1, 2, 3]
my_tuple: tuple[int, str, bool] (1, wgg, False)
my_dict: dict[str, int] {lyy: 812}# 在注释中进行类型注解
var1 random.randint(1, 10) # type: int
var2 json.loads({name:zhangsan}) # type: dict[str, str]def func():return 10var3 func() # type: int# 类型注解的限制
var4: int 我就用字符串了
# 运行也不报错2函数方法的类型注解
1.形参注解 2.返回值注解 整体参考代码
对函数进行类型注解
# 对参数进行类型注解
def add(x: int, y: int):return x yprint(add(812, 313))# 对返回值进行注解
def func(data: list) - list:return data3Union类型 代码示例
演示Union联合类型注解# 使用Union类型得先导包
from typing import Unionmy_list: list[Union[int, str]] [1, 2, lyy, wgg]def func(data: Union[int, str]) - Union[int, str]:passfunc()9.多态
1多态的概念 多态常用于继承的关系上 2抽象类接口
如何理解抽象类
答
在Python中抽象类是使用abc模块Abstract Base Class来定义的。抽象类不能被实例化而是用来规范其他类的行为。抽象类中定义了一些抽象方法这些方法必须在子类中被实现。
要定义一个抽象类需要继承abc.ABC类并使用abc.abstractmethod来装饰抽象方法。例如 import abcclass Animal(abc.ABC):abc.abstractmethoddef talk(self):pass这里我们定义了一个Animal类并且使用abc.abstractmethod装饰talk()方法。这个类就是一个抽象类不能被实例化只能被其他类继承。
子类继承抽象类时必须实现父类中的所有抽象方法否则会抛出TypeError异常。例如 class Dog(Animal):def talk(self):print(Woof!)class Cat(Animal):def talk(self):print(Meow!)这里我们定义了两个子类Dog和Cat它们都继承了Animal类并且实现了抽象方法talk()。我们可以实例化这些子类并且调用它们的talk()方法。例如 dog Dog()
dog.talk() # 输出 Woof!cat Cat()
cat.talk() # 输出 Meow!在Python中抽象类的作用是规范子类的行为强制子类遵循一定的规范。通过抽象类我们可以让代码更加规范和清晰。同时抽象类也可以作为多态的基础让代码更加灵活和可扩展。 为什么要使用抽象类呢 抽象类的实现 3代码实现
多态的演示
# 这就是抽象类或者说是接口
class Animal:def speak(self):passclass Dog(Animal):def speak(self):print(汪汪汪)class Cat(Animal):def speak(self):print(喵喵喵)def make_voice(animal: Animal):animal.speak()dog Dog()
cat Cat()make_voice(dog)
make_voice(cat)# 演示抽象类
class AC:def cool_wind(self):制冷passdef hot_wind(self):制热passdef swing_l_r(self):左右摆风passclass Midea_AC(AC):def cool_wind(self):制冷print(美的空调制冷)def hot_wind(self):制热print(美的空调制热)def swing_l_r(self):左右摆风print(美的空调左右摆风)class Gree_AC(AC):def cool_wind(self):制冷print(格力空调制冷)def hot_wind(self):制热print(格力空调制热)def swing_l_r(self):左右摆风print(格力空调左右摆风)def make_cool(ac: AC):ac.cool_wind()midea_AC Midea_AC()
gree_AC Gree_AC()make_cool(midea_AC)
make_cool(gree_AC)10.综合案例
1案例分析 数据内容 2需求分析 3代码实现
1.data_define.py
数据定义的类
class Record:# 日期date: str None# 订单idorder_id: str None# 销售额money: int None# 销售省份province: str Nonedef __init__(self, date, order_id, money, province):self.date dateself.order_id order_idself.money moneyself.province provincedef __str__(self):return fdate:{self.date}, id:{self.order_id},money:{self.money},province:{self.province}2.file_define.py
文件相关类定义import jsonfrom data_define import Record# 定义一个抽象类用于做顶层设计
class FileReader:def read_data(self) - list[Record]:读取文件数据将每一条数据都转换为Record对象封装到list内返回passclass TextFileReader(FileReader):# 文件路径path Nonedef __init__(self, path):self.path pathdef read_data(self) - list[Record]:复写读取文件方法:return:f open(self.path, r, encodingUTF-8)record_list: list[Record] []for line in f.readlines():# 消除 \nline line.strip()data_list line.split(,)record_list.append(Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]))f.close()return record_listclass JsonFileReader(FileReader):# 文件路径path Nonedef __init__(self, path):self.path pathdef read_data(self) - list[Record]:复写读取JSON文件方法:return:f open(self.path, r, encodingUTF-8)record_list: list[Record] []for line in f.readlines():data_dict json.loads(line)record_list.append(Record(data_dict[date],data_dict[order_id],int(data_dict[money]),data_dict[province]))f.close()return record_list# 测试代码
if __name__ __main__:r TextFileReader(D:\\IOText\\DataDoing\\2011年1月销售数据.txt)j JsonFileReader(D:\\IOText\\DataDoing\\2011年2月销售数据JSON.txt)list1 r.read_data()print(list1[0])list2 j.read_data()# for r in list1:# print(r)# for j in list2:# print(j)3.main.py
主业务逻辑代码from file_define import FileReader, TextFileReader, JsonFileReader
from data_define import Record
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeTypetext_file_reader TextFileReader(D:\\IOText\\DataDoing\\2011年1月销售数据.txt)
json_file_reader JsonFileReader(D:\\IOText\\DataDoing\\2011年2月销售数据JSON.txt)month_1_data: list[Record] text_file_reader.read_data()
month_2_data: list[Record] json_file_reader.read_data()# 将两个月份的数据合并
all_data: list[Record] month_1_data month_2_data
# 开始进行数据计算
data_dict {}
for record in all_data:if record.date in data_dict.keys():# 累加data_dict[record.date] record.moneyelse:# 创建data_dict[record.date] record.money# 可视化
bar Bar(init_optsInitOpts(themeThemeType.LIGHT)
)
# 添加x轴的数据
bar.add_xaxis(list(data_dict.keys()))
# 添加Y轴的数据
bar.add_yaxis(销售额, list(data_dict.values()), label_optsLabelOpts(is_showFalse))bar.set_global_opts(title_optsTitleOpts(title每日销售额)
)
bar.render(每日销售额.html)结语
学这么点内容学习了一天确实是不用着急不要慌张脚踏实地的一步一步的走就行啦
今天就到这里
拜拜ヾ(▽)Bye~Bye~