python语法 进阶篇
进阶篇
面向对象:
对象就是"容器",用来存放数据和功能的,数据和功能的集合体。
类也是"容器",是用来存放同类对象共用的数据和功能的
面向过程:把程序流程化
注意:面向对象是一种编程思想
1.类
解决不同对象存放相同数据的问题
class Hero:
hero_work='射手'
def __init__(self,name,hp,speed,atk):
self.name=name
self.hp=hp
self.speed=speed
self.atk=atk
self.equipment=[]
def get_hero_info(self):
print(f'英雄属性:\n名字:{self.name},移速:{self.speed},生命:{self.hp},攻击力:{self.atk}')
def set_hero_speed(self,speed_plus):
self.speed+=speed_plus
def buy_equipment(self,e_name):
self.equipment.append(e_name)
类的属性访问
print(Hero.__dict__['get_hero_info'])
得到函数的内存地址

对象的产生
传入的属性分别对应前面定义__init__方法的参数:名字,生命值,速度和攻击力
hero1_obj=Hero('鲁班七号',3000,400,100)
hero2_obj=Hero('后羿',3100,410,110)
调用类的过程
1.创建空对象
2.调用__init__方法,以及调用类的时候括号里的参数,一同传递给__init__对象
3.返回初始化之后的对象
2.隐藏属性
面向对象三大特性:封装、继承、多态
封装:整合
隐藏属性:
1.本质:隐藏的本质,只是一种改名操作
2.对外不对内
3.property
作用:用来绑定给对象的方法伪装成一个数据类型
class Test:
def __init__(self,name,age):
self.__name=name
self.__age=age
def f1(self):
print(self.__age,self.__name)
def get_age(self):
return self.__age
def set_age(self,new_age):
if type(new_age) is not int:
print("你个傻子,年龄只能为整数")
return
if not 0<=new_age <=150:
print("你个傻子,年龄必须在0-150岁之间")
return
self.__age=new_age
def del_age(self):
del self.__age
age = property(get_age,set_age,del_age)
obj1=Test('xxx',118)
print(obj1.age)
obj1.age=200
print(obj1.age)
4.继承
特性:遗传
多继承的优缺点:
优点:
- 一个子类可以同时遗传多个父类的属性
缺点
- 1.多继承违背了人的思维习惯
- 2.多继承使代码可读性变差
如果必须使用多继承,应该使用Mixins(一种编程规范)
class Parent1:
x=10
pass
class Parent2:
pass
class Child1(Parent1):#单继承
pass
class Child2(Parent1,Parent2):#多继承
pass
print(Child1.__bases__)
print(Child2.__bases__)
print(Child1.x)

class Human:
star = 'earth'
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender
class Chinese(Human):
nation='China'
def __init__(self,name,age,gender,balance):
Human.__init__(self,name,age,gender)
self.balance=balance
def speak_chinese(self):
print(f'{self.name}在说普通话')
class American(Human):
nation='美国'
def speak_English(self):
print(f'{self.name}在说英语')
h1=Chinese('张征',55,'男',66)
h1.speak_chinese()

5.MixIns机制
class Fowl:
pass
class SwimMixIn:
def swimming(self):
pass
class Chicken(Fowl):
pass
class Duck(SwimMixIn,Fowl):
pass
class Goose(SwimMixIn,Fowl):
pass
引入MixIn有助于提高代码可读性,通过后缀加入MixIn,able,ible
6.super
class Human:
star = 'earth'
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender
class Chinese(Human):
nation='China'
def __init__(self,name,age,gender,balance):
super(Chinese,self).__init__(name,age,gender)
self.balance=balance
def speak_chinese(self):
print(f'{self.name}在说普通话')
class American(Human):
nation='美国'
def speak_English(self):
print(f'{self.name}在说英语')
h1=Chinese('张征',55,'男',66)
h1.speak_chinese()
print(h1.__dict__)

7.多态
多态是一种编程思想
# coding:utf-8
class Car:
def run(self):
print("开始跑")
class Benz(Car):
def run(self):
super().run()
print("加98号汽油")
class Car1(Car):
def run(self):
super().run()
print("这是car1")
class Car2(Car):
def run(self):
super().run()
print("这是车2")
c1=Benz()
c2=Car1()
c3=Car2()
c1.run()
c2.run()
c3.run()

8.静态方法(staticmethod)
类里面的一个函数用不到类的参数等等,可以用静态函数
class Mysql:
def __init__(setting,ip,port):
setting.IP=ip
setting.PORT=port
@staticmethod
def f1(cls):
print('666')
@classmethod
def instamce_from_conf(cls, setting=None):
print(cls)
obj=cls(setting.IP,setting.PORT)
9.反射机制
主要看四个函数
hasarr()
getarr()
setarr()
delarr()
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
def prt(self):
print(self.age, self.name)
obj = Human("manba", 66)
# print(dir(obj))
#查询是否存在属性 hasattr
print(hasattr(obj, 'x'))
#得到属性的值 getattr
print(getattr(obj, 'name'))
#修改属性的值 setattr
setattr(obj, 'name', '李白')
print(obj.name)
#删除属性的值 delattr
delattr(obj, 'name')
print(obj.__dict__)
class Ftp:
def put(self):
print('正在上传数据')
def get(self):
print("正在下载数据")
def interact(self):
opt = input("输入想要进行的指令>>>")
getattr(self, opt, self.warning)()
def warning(self):
print('改功能不存在')
obj = Ftp()
obj.interact()
10.内置方法
内置方法在满足时候自动执行
class Human:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return f'<{self.name}:{self.age}>'
obj=Human("张大仙",66)
print(obj.__str__())
print(obj)
- _str_
- _del_:对象删除时候时先执行
- _init_
- _call_:
class Test:
def __init__(self,name,age):
self.name=name
self.age=age
obj = Test("niu",66)
obj()

class Test:
def __init__(self,name,age):
self.name=name
self.age=age
def __call__(self,*args,**kwargs):
print(self.name,self.age)
obj = Test("niu",66)
obj()

11.元类
定义:实例化产生类的类
创建元类的步骤:
#1.类名
class_name='Human'
#2.基类
class_bases=(object,)
#3.执行类子代码,产生名称空间
class_dic={}
class_body="""
def __init__(self,name,age):
self.name=name
self.age=age
def prt(self):
print(self.age,self.name)
"""
exec(class_body,{},class_dic)
print(class_dic)
#4.调用元类
Human=type(class_name,class_bases,class_dic)
# print(Human)
obj=Human('zdx',77)
调用内置元类type的__call__
- 调用Mytype的__new__方法,初始化对象Human
- 调用Mytype的init方法,初始化对象Human
3.返回初始化好的对象Human
11.枚举与拉链
- enumerate枚举:
li=['a','b','c','d']
for index,value in enumerate(li,1):
print(index,value)
后面的参数用于设置初始时候下标从哪个数字开始计算

- zip拉链:
li2=['1','2','3','4']
li3=['1','2','3']
for i in zip(li,li2,li3):
print(i)
12.eval和exec
- eval:
b=2
g={'b':4} #全局名称空间
l={"b":5} #局部名称空间
res=eval('1+b',g,l)
print(res)
# print(l)

- exec:
res=exec(input('>>>'))
print(res,type(res))
13.异常处理
try:
子代码块
except 异常类型1 as e:
子代码快
except 异常类型2 as e:
子代码块
except 异常类型3 as e:
子代码块
except Exception as e:
子代码块
else:
子代码块:会被检测代码
finally:
子代码块4
实例:
print("开始")
try:
print('1'.center(20,'*'))
num='abc'
int(num)
a=[1,2,3]
print(a[10])
except ValueError as e:
print("异常处理信息:",e)
print("异常处理成功")
except Exception as e:
print("出现其他异常")
print("异常处理信息:",e)
print("异常处理成功")
finally:
print("程序执行完毕")
print("结束")

python语法 进阶篇的更多相关文章
- Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)
Python开发[第七篇]:面向对象 详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)> ...
- 第六篇:Python函数进阶篇
在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点: 一.Python的迭代器 ...
- python语法进阶这一篇就够了
前言 前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构.循环结构以及函数这些具体的框架,还学习了列表.元组.字典.字符串这些Python中特有的数据结构,还用这些 ...
- python Django 进阶篇
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- python网络进阶篇
并发编程 进程 操作系统的历史 # 手工操作 —— 穿孔卡片 # 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数 ...
- Python 面向对象 (进阶篇)
<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可 ...
- Python—函数进阶篇
lambda表达式(匿名函数表达式) 作用:创建一个匿名函数对象.同def类似,但不提供函数名. 语法:lambda [形参1,形参2,...] : 表达式 语法说明 lambda 只是一个表达式,它 ...
- Python语法进阶(2)- 正则表达式
1.初识正则表达式 1.1.什么是正则表达式 正则表达式是一个特殊的字符序列,便于检查一个字符串是否与某种模式匹配:应用于字符串,在字符串中通过复杂的过滤筛选等操作得到我们想要的数据: 正则表达式的特 ...
- Python语法进阶
1.变量进阶 2.局部变量.全局变量 3.函数进阶 4.函数进阶
- Python 学习 —— 进阶篇(装饰器、类的特殊方法)
Python基础部分学完之后,在进入其OOP部分前,先理解一下其装饰器这种结构,其功能可类比于Java中的面向切面编程,下面参见具体实例: def log(f): def fn(x): print ' ...
随机推荐
- JavaScript环境搭建与调试
JavaScript的环境搭建非常简单,一个Chrome浏览器(实际上任何浏览器都自带有JavaScript解释器,Chrome对调试更友好,下载链接:http://www.51xiazai.cn/s ...
- frp实现内网穿透访问内网多台Linux服务器
本文主要记录笔者在使用frp实现内网穿透访问内网多台Linux服务器的全过程,包括公网服务器的配置.frp服务端.客户端的下载与配置,以及配置systmctl来实现系统级启停frp,并记录我遇到的一些 ...
- LogStash介绍及二进制安装
概述 官方文档:https://www.elastic.co/guide/en/logstash/7.17/introduction.html Logstash 是一款开源数据收集引擎,具备实时流水线 ...
- BAPI_OUTB_DELIVERY_CREATE_SLS、BAPI_OUTB_DELIVERY_CONFIRM_DEC 创建交货单,交货单过账
FUNCTION zsd_dn_create1. *"-------------------------------------------------------------------- ...
- Selenium框架
Selenium框架 Selenium是一个自动化测试工具,用于模拟用户在Web应用程序上的操作.它提供了多种编程语言的接口,如Python.Java等,使测试人员能够编写自动化测试脚本.Seleni ...
- [abc313 h/ex] Group Photo
Ex - Group Photo 很牛的题 设\(A_0=A_{n+1}=INF\),那么对于每个\(B_i\)有\(B_i>\min(A_{i-1},A_i)\),所以考虑设\(C_i\)表示 ...
- MySQL核心知识学习之路(4)
作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第四篇,总结了MySQL的锁相关知识. 上一篇:MySQL核心知识 ...
- 一个工具管理你的所有 SDK 版本!
众所周知,我们在面对同一个 SDK 的不同版本时,需要使用到不同的工具来管理,例如: Java:JEnv NodeJs:nvm ... 它们的原理都是基于系统的软连接,让环境变量指向一个软连接来实现切 ...
- Xamarin.Android 设置BaseAdapter 的基础公共类
https://blog.csdn.net/sinat_26562875/article/details/51447785 /// <summary> /// 通用适配器 /// < ...
- Day8 备战CCF-CSP练习
Day8 前几天写了牛客周赛和集美大学ACM赛的题,耽误了几天,这几天会陆续发他们的题解,前两天的题就不补了,. 题目描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况. 每位读者有一 ...