老男孩Python笔记_25

与类相关的魔术属性

class Human():
	pass

class Man():
	pass
	
class Woman():
	pass
	
class Children(Man,Woman):
	'''
	类的功能: 描述一个小孩
	类的成员属性:eye
	类的成员方法:sleep __beat_doudou
	'''
	eye = "蓝色眼睛"
	# 普通方法
	def eat():
		print("小孩喜欢吃东西")
		
	# 绑定方法
	def sleep(self):
		print("小孩喜欢睡觉,一天睡20个小时候")

	def drink(self):
		print("小孩喜欢喝水,喝水尿")
		
	def cry(self,func):
		res = func.__name__
		print(res,type(res))
		
	# 私有绑定方法
	def __beat_doudou(self):
		print("小孩喜欢打豆豆")

dict

获取对象或类的内部成员结构

obj = Children()
res = obj.__dict__
print(res)
print(Children.__dict__)

doc

获取对象或类的内部文档

res = Children.__doc__
print(res)

name

获取类名函数名

def myfunc():
	print("我是函数")
obj.cry(myfunc)	

class

获取当前对象所属的类

res = obj.__class__
print(res)

bases

获取一个类直接继承的所有父类,返回元组

res = Children.__bases__
print(res)

反射

  • 概念:通过字符串去操作类对象 或者 模块中的属性方法

hasattr()

检测对象/类是否有指定的成员 [以是否能够调用为基准]

res = hasattr(obj,"eye")
print(res)
res = hasattr(Children,"eat")
print(res)

getattr()

获取对象/类成员的值

res = getattr(obj,"eye")
print(res)
res = getattr(obj,"sleep")
print(res) # 它返回的是一个绑定方法
res()
res = getattr(Children,"eat")
print(res)
res()
res = getattr(Children,"sleep")
print(res) # 它不是一个绑定方法
res(123)

# getattr 第三个参数可选,如果获取不到这个值,可以添加默认提示.预防报错
res = getattr(obj,"abc","对不起这个真没有")
print(res)


# strvar = input("请输入您要调用的函数")
# if hasattr(obj,strvar):
	# res = getattr(obj,strvar)
	# res()

setattr()

设置对象/类成员的值

setattr(obj,"hair","屎黄色")
print(obj.hair)
setattr(Children,"skin","绿色")
print(Children.skin)

delattr()

删除对象/类成员的值

delattr(obj,"hair")
# print(obj.hair)
delattr(Children,"skin")
# print(Children.skin)

模块的反射

  • sys.modules 返回一个系统字典,字典的键是加载的所有模块
import sys
res = sys.modules
print(res)
print(__name__) #__main__
mymodule = sys.modules[__name__]
print(mymodule) # 模块对象

def func1():
	print("这是func1方法")
def func2():
	print("这是func2方法")
def func3():
	print("这是func3方法")
  • 用户给我字符串,我反射对应的方法调用
while True:
	strvar  = input("请输入您要调用的方法")
	
	if hasattr(mymodule,strvar):
		_func_ = getattr(mymodule,strvar)
		_func_()
	else:
		print("大哥,没有")

网络编程基础

网络开发的两大架构

c/s 架构 : client server
B/S 架构 : Brower server

(1)bs 和 cs 架构之间的关系?
(2)哪一种架构更好呢?

  1. c/s 架构

老男孩Python笔记_25

  1. B/S 架构

老男孩Python笔记_25

基础概念

一台主机有两个重要标识:

  • mac地址:标记一台机器的物理地址 (不可变)

  • ip 地址:#标记一台机器的逻辑地址 (可变)

    IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。ip地址分为两种 ipv4 和 ipv6:
    分类ipv4 和 ipv6:

    • ipv4地址是一个32位的二进制数

    • ipv6地址是一个128位的二进制数

    • ipv4: 以4段点分十进制表示 X.X.X.X => 范围
      0.0.0.0 ~ 255.255.255.255 地址范围2^32-1

    • ipv6 : 以8段冒分十六进制表示 X:X:X:X:X:X:X:X => 范围
      0:0:0:0:0:0:0:0 ~ FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 地址范围2^128-1
      ip地址的最后一位0或者255 两个数字不能用,一般最后一位0表达的是网段,255代表广播地址

  • 网段 : 网段的作用,主要用来划分同一区域里的某些机器是否能够互相通信。在一个网段里可以不同过因特网,直接对话
    判别的依据:如果IP地址和子网掩码相与得到的值相同就是同一网段

  • 内网 : 以下地址为预留地址,永远不会被当做公网ip来分配
    192.168.0.0 - 192.168.255.255
    172.16.0.0 - 172.31.255.255
    10.0.0.0 - 10.255.255.255

  • 外网 :
    在任何地方都可以访问的就是外网(排除防火墙的因素)

  • 子网掩码:区分网段和主机
    255.255.255.0 / 255.255.0.0 / 255.0.0.0
    ip1:192.168.10.12 ip2:192.168.1.16

  • 端口 : "端口"是英文port的意译,是具体某个程序与外界通讯的出口。 取值范围:0~65535
    使用时至少8000以上 访问地址加端口:192.168.2.1:8000

  • 局域网 : 在同一区域内由多台计算机互联形成通讯。【具有可重复的内网ip】

  • 广域网 : 在不同区域内有多台计算机互联形成通讯。【具有唯一的公网ip】

  • 交换机 : 对同一网段的不同机器之间进行数据转发的设备 [每一台机器和交换机相连,形成通信]

  • 路由器 : 对不同网段的不同机器之间进行数据转发的设备 [每一个局域网和路由器相连,形成通信]

  • arp协议 : 每台主机都有arp缓存表 ,主要作用通过ip找mac的一个协议规则
    【实现方式:通过交换机一次广播,一次单播找到的】

osi七层模型

人们按照分工不同把互联网协议从逻辑上划分了层级: osi4层,osi5层,osi7层 三类模型

老男孩Python笔记_25

局域网模型

局域网内,各个主机的通讯

老男孩Python笔记_25

广域网模型

广域网内,各个主机的通讯

老男孩Python笔记_25