进阶篇

面向对象

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

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

面向过程:把程序流程化

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

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. JavaScript环境搭建与调试

    JavaScript的环境搭建非常简单,一个Chrome浏览器(实际上任何浏览器都自带有JavaScript解释器,Chrome对调试更友好,下载链接:http://www.51xiazai.cn/s ...

  2. frp实现内网穿透访问内网多台Linux服务器

    本文主要记录笔者在使用frp实现内网穿透访问内网多台Linux服务器的全过程,包括公网服务器的配置.frp服务端.客户端的下载与配置,以及配置systmctl来实现系统级启停frp,并记录我遇到的一些 ...

  3. LogStash介绍及二进制安装

    概述 官方文档:https://www.elastic.co/guide/en/logstash/7.17/introduction.html Logstash 是一款开源数据收集引擎,具备实时流水线 ...

  4. BAPI_OUTB_DELIVERY_CREATE_SLS、BAPI_OUTB_DELIVERY_CONFIRM_DEC 创建交货单,交货单过账

    FUNCTION zsd_dn_create1. *"-------------------------------------------------------------------- ...

  5. Selenium框架

    Selenium框架 Selenium是一个自动化测试工具,用于模拟用户在Web应用程序上的操作.它提供了多种编程语言的接口,如Python.Java等,使测试人员能够编写自动化测试脚本.Seleni ...

  6. [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\)表示 ...

  7. MySQL核心知识学习之路(4)

    作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第四篇,总结了MySQL的锁相关知识. 上一篇:MySQL核心知识 ...

  8. 一个工具管理你的所有 SDK 版本!

    众所周知,我们在面对同一个 SDK 的不同版本时,需要使用到不同的工具来管理,例如: Java:JEnv NodeJs:nvm ... 它们的原理都是基于系统的软连接,让环境变量指向一个软连接来实现切 ...

  9. Xamarin.Android 设置BaseAdapter 的基础公共类

    https://blog.csdn.net/sinat_26562875/article/details/51447785 /// <summary> /// 通用适配器 /// < ...

  10. Day8 备战CCF-CSP练习

    Day8 前几天写了牛客周赛和集美大学ACM赛的题,耽误了几天,这几天会陆续发他们的题解,前两天的题就不补了,. 题目描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况. 每位读者有一 ...