进阶篇

面向对象

对象就是"容器",用来存放数据和功能的,数据和功能的集合体。

类也是"容器",是用来存放同类对象共用的数据和功能的

面向过程:把程序流程化

注意面向对象是一种编程思想

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__

  1. 调用Mytype的__new__方法,初始化对象Human
  2. 调用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语法 进阶篇的更多相关文章

  1. Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)

    Python开发[第七篇]:面向对象   详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇)   上一篇<Python 面向对象(初级篇)> ...

  2. 第六篇:Python函数进阶篇

    在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点:  一.Python的迭代器 ...

  3. python语法进阶这一篇就够了

    前言 前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构.循环结构以及函数这些具体的框架,还学习了列表.元组.字典.字符串这些Python中特有的数据结构,还用这些 ...

  4. python Django 进阶篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  5. python网络进阶篇

    并发编程 进程 操作系统的历史 # 手工操作 —— 穿孔卡片 # 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数 ...

  6. Python 面向对象 (进阶篇)

    <Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可 ...

  7. Python—函数进阶篇

    lambda表达式(匿名函数表达式) 作用:创建一个匿名函数对象.同def类似,但不提供函数名. 语法:lambda [形参1,形参2,...] : 表达式 语法说明 lambda 只是一个表达式,它 ...

  8. Python语法进阶(2)- 正则表达式

    1.初识正则表达式 1.1.什么是正则表达式 正则表达式是一个特殊的字符序列,便于检查一个字符串是否与某种模式匹配:应用于字符串,在字符串中通过复杂的过滤筛选等操作得到我们想要的数据: 正则表达式的特 ...

  9. Python语法进阶

    1.变量进阶 2.局部变量.全局变量  3.函数进阶 4.函数进阶

  10. Python 学习 —— 进阶篇(装饰器、类的特殊方法)

    Python基础部分学完之后,在进入其OOP部分前,先理解一下其装饰器这种结构,其功能可类比于Java中的面向切面编程,下面参见具体实例: def log(f): def fn(x): print ' ...

随机推荐

  1. arcgis创建sqlserver企业级空间数据库过程中出现的问题及解决方案

    在arcgis中创建sqlserver版本的企业空间数据库过程中,出现了多种问题,现把问题的现象.原因和解决方案记录下来,以防遗忘(年纪大了). 1 用sa账号创建空间数据库提示创建失败15456 安 ...

  2. 转|java反射方法和使用详解

    概述   反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意个对象,都能够调用它的任意一个方法.在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息.反射是 ...

  3. Spring Boot项目基于POI框架导出Excel表格

    1.    依赖 我的项目是基于Spring Boot的,这里只贴出POI框架需要依赖的两个包,其他的都无所谓,只要能提供Controller让浏览器访问即可.在pom.xml配置文件中增加如下两个包 ...

  4. 【译】Visual Studio 扩展管理器更新

    Visual Studio 2022 的最新更新引入了专门的设计用于改进扩展管理方式的功能.这些更新提供的工具可以帮助您自动化过程,为配置提供详细的控制,并增强用户界面以简化您的开发工作流程. 无缝自 ...

  5. springboot的jar包转war放入tomcat

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 1. 修改pom文件,打包形式改为war 2.移除内嵌的tomcat模块,但是为了在本机测试方便,我们还需要引入它,所以配置如下 3.修改启动 ...

  6. 如何基于three.js(webgl)引擎架构,实现3D密集架库房,3D档案室智能巡检

      前言: 看了一下 距离上篇课程发布,一年多了.这一年多来也迷茫,也怀疑,在AI时代,是不是失去了写文章的意义了.切身感受到那种面对科技浪潮时的迷茫和无力感.当AI能写出流畅.结构清晰的文章,甚至模 ...

  7. (萌新向)对于nodejs原型链污染中merge函数的作用的个人理解

    merge函数 function merge(target,source){ for (let key in source){ if (key in source && key in ...

  8. 把数据库表的信息添加到list集合里面

    把数据库表里面的信息添加到集合里面并且打印出来: 数据库表的内容:  java代码逻辑处理: 1 public static void main(String[] args) { 2 3 Connec ...

  9. 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?

    过去几年,人工智能一路狂飙,从识图识声,到能写能画,再到能干活做决策,甚至走上现实生活的"物理战场".你是否也曾困惑,AI到底发展到哪个阶段了?又有哪些能力正在悄悄进化? Nvid ...

  10. MCP Server 之旅第 7 站:助力 MCP 打破“黑盒困境”

    背景 在分布式系统中,请求链路追踪(Trace) 是诊断性能瓶颈.定位故障的核心能力.近期,阿里云函数计算的 Tracing 能力由 2.0 的 Jeager 升级为 OpenTelemetry 标准 ...