类和对象
python3统一了类与类型的概念;类==类型;从一组对象中提取相似的部分就是类;特征与技能的结合体就叫做对象;

类的功能:
初始实例化;
属性引用;
1、数据属性;
2、函数属性;

对于一个实例来说,只一种功能:属性引用;

示例:
class Garen:
camp = 'Demacia'
def __init__(self,nickname,aggresivity,life_value):
self.nickname = nickname #gl.nickname=nickname
self.aggrv=aggresivity
self.life_value=life_value def attack(self,enemy): #定义技能,就是一个函数;
print('is attacking',self,enemy) gl=Garen('草丛伦',82,100) #Garen.__init__(gl,'草丛伦',82,100) print(Garen.camp) #调用属性;
print(Garen.__init__) #返回函数
print(Garen.attack) #返回函数 #对于一个实例来说,只一种功能:属性引用;对于实例本身来说只拥有数据属性;
print(gl.nickname)
print(gl.aggrv)
print(gl.life_value) print(gl.camp)
print(gl.attack) #返回绑定方法;
print(Garen.attack) #通过类来调用自己的函数属性; 返回函数 Garen.attack(1,2)
gl.attack('a') #Garen.attack(gl.'a')

  

类就是函数与数据的结合体;

对象的交互:
class Garen:
camp = 'Demacia'
def __init__(self,nickname,aggresivity,life_value):
self.nickname = nickname #gl.nickname=nickname
self.aggrv=aggresivity
self.life_value=life_value def attack(self,enemy): #定义技能,就是一个函数;
print('is attacking',self,enemy) class Riven:
camp="Noxus"
def __init__(self,nickname,aggresivity,life_value):
self.nickname = nickname #gl.nickname=nickname
self.aggrv=aggresivity
self.life_value=life_value def attack(self,enemy): #定义技能,就是一个函数;
print('is attacking',self,enemy)
enemy.life_value=self.aggrv # g1.life_value-=r1.aggrv g1 = Garen('草丛伦',82,100)
r1 = Riven('锐',50,200) r1.attack(g1)

  

类:

class Chinese:
dang='gongchandang' #共同特点
def __init__(self,name,age,gender): #私有特点
self.name=name
self.age=age
self.gender=gender def talk(self): #共有的功能
print('=====>') p1 = Chinese('egon',18,'female') #创建实例;现实中先有具体的实例,再定义类; p1. #p1.表示在调用实例自己;在调用p1的属性;
print(p1.x) #先在p1自己里面找;def__init__,如果没有则再找类,类没有就报错;
例:print(p1.dang)

  

继承:
单继承
多继承

查看继承:
SubClass1.__bases__

示例:
class A:
pass
class B(A):
pass
print(B.__bases__)
print(A.__bases__) #默认继承object; (<class '__main__.A'>,)
(<class 'object'>,) A没有object就叫做新式类;pytho3中所有类都叫做新式类;python2中叫经典类; 示例:
class Animal:
start='earth'
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender def run(self):
print('running') def talk(self):
print('talking') class People(Animal):
def piao(self): #设计独特的技能
preint('is piaoing') class Pig(Animal):
pass p1=People('alex',1000,'female')
#pig1=Pig() print(p1.start)
print(p1.running)
print(p1.name)

  

继承与重用性;
继承用来解决代码的重用性;父类不能调用子类的功能;

继承顺序
深度优先
从左到右 python2
广度优先
python3

python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表,例如

>>> F.mro() #等同于F.__mro__
[<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

为了实现继承,python会在MRO列表上从左到右开始查找基类,直到找到第一个匹配这个属性的类为止。
而这个MRO列表的构造是通过一个C3线性化算法来实现的。我们不去深究这个算法的数学原理,它实际上就是合并所有父类的MRO列表并遵循如下三条准则:
1.子类会先于父类被检查
2.多个父类会根据它们在列表中的顺序被检查
3.如果对下一个类存在两个合法的选择,选择第一个父类

示例:
class Hero:
def __init__(self,nickname,aggresivity,life_value):
self.nickname = nickname #gl.nickname=nickname
self.aggrv=aggresivity
self.life_value=life_value def attack(self,enemy): #定义技能,就是一个函数;
print('is attacking',self,enemy)
enemy.life_value=self.aggrv # g1.life_value-=r1.aggrv class Garen(Hero):
camp = 'Demacia'
def fly(self):
print('is flying') def attack(self):
print('attacking') class Riven(Hero):
camp="Noxus" g1 = Garen('草丛伦',30,10)
g1.fly() r1=Riven('xxx',230,30)
r1.attack()

  

组合与重用性;
组合:
一个对象的数据属性是另外一个对象;

继承表达‘是’的关系,组合表达‘有’的关系;

示例:
class Teacher:
def __init__(self.name):
self.name=name
self.birth=Date(1999,1,25) #实例属性来自于另外一个类;
self.course=Course('python',11000,'4months') class Course:
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period class Date:
def __init__(self,year,month,day):
self.year=year
self.month=month
self.day=day t1 = Teacher('egon')
print(t.birth.year)

  

接口与归一化设计:
接口:
就是一堆函数的结合体;只定义一堆技能;

归一化示例:

class ALLFile: #接口类 接口功能只定义名称,而不去实现功能,具体实现在子类中;
def read(self): #接口函数
pass
def write(self):
pass class Text(ALLFile):
def read(self):
print('text read')
def write(self):
print('text write') class Sata(ALLFile):
def read(self):
print('sata read')
def write(self):
print('sata write') t=Text()
s=Sata() t.read()
t.write() s.read()
s.write() 抽象类:
import abc #来实现抽象类;
class ALLFile(metaclass=abc.ABCMeta): #抽象类 只是用来被别人继承,不能被调用;
def test(self):
print('testing')
@abc.abstractmethod
def read(self): #接口函数
pass
@abc.abstractmethod #表示让子类必须实现;子类不指明会报错;
def write(self):
pass class Text(ALLFile):
def read(self):
print('text read')
def write(self):
print('text write') t=Text()

  

多态与多态性:
多态:
是一类事物的多种状态;同一种事物的不同形态,如序列类型包含字符串,列表,元组;
多态性:
优点:
程序的灵活性;
程序的扩展性;

示例:
def func(obj):
print(obj.__len__()) func(s)
func(l)
func(t) 示例:
class Animal:
def talk(self):
print('talking') class Dog(Animal):
def talk(self): #设计独特的技能
preint('say wqangwang') class Pig(Animal):
print('say aoao') class Cat(Animal):
def talk(self):
print('cat talking') p1 = People()
pig1=Pig()
D1=Dog()
c=Cat()
以上为多态,程序的实现者 def func(obj):
obj.talk() func(p1)
func(pig1)
func(D1)
func(c)
以上为多态性;程序的使用者,不能改变代码;

  

封装:
数据的封装;
保护隐私;
方法的封装;
主要隔离复杂度;

封装两个层面;

示例:
class Foo:
x=1
def __init__(self,name,money):
self.name=name
self.__money=money #相当于_Foo__money def get_money(self):
print(self.__money)
self.__spam() def __spam(self): #_Foo__spam 变形在定义时只会执行一次;后来赋值不会变形;
print('from spam') f=Foo('alex',20000)
f.get_money print(f.__dict__)
print(Foo.__dict__) 对于第一层面的封装(隐藏),类名.和实例名.就是访问隐藏属性的接口(或者叫入口)
对于第二层面的封装(隐藏), 示例:
class A:
def spam(self):
print("A.spam") def test(self):
print('A.test')
self.spam() class B(A):
pass b1=B()
b1.test() 二、
class A:
def __spam(self): #_A__spam
print("A.spam") def test(self):
print('A.test')
self.__spam() #self._A_spam class B(A):
def __spam(self): #_B_spam
print('B.spam') b1=B()
b1.test() 特性:
用来提供接口的一种方式; 示例:
class A:
def __init__(self.name):
self.__name=name @property #相当于C++中get
def name(self):
return self.__name @name.setter #相当于C++中set
def name(self,value):
if not isinstance(value,str):
raise TypeError('%s must be str'%value)
print('++++++?')
self.__name=value @name.deleter
def name(self):
print('======>')
raise AttributeError('can not delete') a=A('egon')
print(a.name)
a.name=2
print(a.name) del a.name

  

子类调用父类的方法:

当你使用super()函数时,Python会在MRO列表上继续搜索下一个类。只要每个重定义的方法统一使用super()并只调用它一次,那么控制流最终会遍历完整个MRO列表,每个方法也只会被调用一次(注意注意注意:使用super调用的所有属性,都是从MRO列表当前的位置往后找,千万不要通过看代码去找继承关系,一定要看MRO列表)

示例:
class People:
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender
def test(self):
print('from A.test') class Teacher(People):
def __init__(self,name,age,gender,level):
People.__init__(self,name,age,gender)
self.level=level t=Teacher('egon',18,'female','teach')
print(t.level) 二、super()
class People:
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender
def test(self):
print('from A.test') class Teacher(People):
def __init__(self,name,age,gender,level):
#People.__init__(self,name,age,gender)
super.__init__(name,age,gender)
self.level=level t=Teacher('egon',18,'female','teach')
print(t.level)

  

具体的编程方法先出现;

面向对象的软件开发:
1、面向对象分析;
2、面向对象设计;
3、面向对象编程;
4、面向对象测试;
5、面向对象维护;

示例:
class Foo:
def __init__(self,name):
self.name=name def __call__(self,*args,**kwargs):
print('========>') f=Foo('egon')
f() 反射: 示例:
class Foo:
def __init__(self,name):
self.nae=name def func(self):
print('func') print(hasattr(Foo,'func'))
f=Foo('egon')
print(hasattr(f,'x'))
f.x=1
print(getattr(f,'x'))
print(getattr(Foo,'func'))
if hasattr(f,'func')
aa=getattr(f,'func')
aa() print(getattr(f,'y',None)) #f.y=1 #f y 1
setattr(f,'y') #设定值;
print(f.__dict__) delattr(f,'y')
print(f.__dict__)

  

socker
用于C/S架构;
用户态
内核态

套接字发展史及分类;
基于文件类型的套接字家族

示例:
服务端:
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
phone.bind(('127.0.0.1',8080)) #插入卡 phone.listen(5) #开机 conn, addr=phone.accept() #接电话 建立连接,客户端地址;
print('tcp的连接',conn)
print('客户端的地址',addr) data = conn.recv(1024) #接收1024个字节; 收消息
print('from client msg :%s' %data) conn.send(data.upper()) #发消息; conn.close() #挂电话 phone.close() #关手机 客户端:
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(('127.0.0.1',8080)) #拨通电话; client.send('hello'.encode('utf-8')) data=client.recv(1024)
print(data)
client.close()

  

python面向对象、类、socket网络编程的更多相关文章

  1. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  2. Python基础-week07 Socket网络编程

    一 客户端/服务器架构 1.定义 又称为C/S架构,S 指的是Server(服务端软件),C指的是Client(客户端软件) 本章的中点就是教大写写一个c/s架构的软件,实现服务端软件和客户端软件基于 ...

  3. Python学习之==>Socket网络编程

    一.计算机网络 多台独立的计算机通过网络通信设备连接起来的网络.实现资源共享和数据传递.在同一台电脑上可以将D盘上的一个文件传到C盘,但如果想从一台电脑传一个文件到另外一台电脑上就要通过计算机网络 二 ...

  4. Python中的socket网络编程(TCP/IP,UDP)讲解

    在网络编程中的一个基本组件就是套接字(socket).套接字基本上是两个端点的程序之间的"信息通道".程序可能分布在不同的计算机上,通过套接字互相发送信息.套接字包括两个:服务器套 ...

  5. python基础(15)-socket网络编程&socketserver

    socket 参数及方法说明 初始化参数 sk = socket.socket(参数1,参数2,参数3) 参数1:地址簇 socket.AF_INET IPv4(默认) socket.AF_INET6 ...

  6. python进阶之Socket 网络编程

     一:网络编程介绍   自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两 ...

  7. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  8. Python Socket 网络编程 (客户端的编程)

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  9. day7 socket网络编程

    Python Socket网络编程 Socket是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的 ...

  10. Python面向对象进阶和socket网络编程-day08

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

随机推荐

  1. flask(1.0)

    目录 一. 关于KeyError和IndexError 二. Python三大主流框架对比 三. flask基础 1.安装flask 2.用flask写出的第一个页面 3.Flask的Response ...

  2. day34 并行并发、进程开启、僵尸及孤儿进程

    day34 并行并发.进程开启.僵尸及孤儿进程 1.并行与并发 什么是并行? 并行指的是多个进程同时被执行,是真正意义上的同时 什么是并发? 并发指的是多个程序看上去被同时执行,这是因为cpu在多个程 ...

  3. krpano下全屏后弹窗失效问题解决方法

    原因 krpano 自身的全屏仅全屏自身,以外的html效果将无法显示 解决方法 把全屏按钮换成浏览器自身的全屏效果 解决步骤 vtourskin.xml <layer name="n ...

  4. 14.Sqoop把数据从HDFS导出到mysql

    创建数据文件 ,gopal,manager,,TP ,manisha,preader,,TP ,kalil,php dev,,AC ,prasanth,php dev,,AC ,kranthi,adm ...

  5. [转帖]英特尔首款采用10nm技术的混合CPU“Lakefield”即将发布

    英特尔首款采用10nm技术的混合CPU“Lakefield”即将发布 intel 也出soc了 里面的东西 跟 安卓和 apple的a系列很像. https://baijiahao.baidu.com ...

  6. ZooKeeper的安装及部署

    Zookeeper的安装部署 2.1 Zookeeper的安装 Zookeeper安装前需要安装好 JDK.配置好环境变量. 下载:zookeeper-3.4.5-cdh5.7.0.tar.gz 解压 ...

  7. 后缀数组 LCP--模板题

    题意: 给你S串和T串,用T串的所有前缀去匹配S串(匹配值是最长公共子串). 问你总值相加是多少. 思路: 先把两个S,T串倒过来,再拼接 S#T 合成一串,跑一下后缀数组 在排序好的rank里计算每 ...

  8. Yii源码分享-底层+view层1

    文件:https://files.cnblogs.com/files/cwlife/YII%E7%BB%A7%E6%89%BF%E6%A0%91.xmind.zip 视屏:https://v.qq.c ...

  9. asp.net 4.Redirect重定向和文件图片上传

    1.Response.Redirect 如图所示: 1.用户点击修改按钮, 浏览器向服务器发送一个POST请求 http://localhost:6543/UpdateUser.ashx 2.服务器的 ...

  10. 解决VS2005打开js,css,asp.php等文件,中文都是乱码的问题

    用记事本打开可以正常观看但是用VS2005编辑器打开JS,中文确实乱码. 解决办法:在VS 2005 的设置里面选择自动检测Utf-8:“工具”->“选项”->“文本编辑器”->“自 ...