(一)反射:如根据输入的字符串判断、设置、删除,获取在类中有映射对于的动态方法/静态属性。即将字符穿反射在类属性/方法在内存的地址。
1.例如:
def bulk(self):
print("给类新增一个方法%s"%self.name)
class Dog(object):
def __init__(self,name):
self.name=name
def eat(self,food):
print("%s is eating %s"%(self.name,food))
d=Dog("板栗")
choice=input("请输入:").strip() #输入的是字符串。
if hasattr(d,choice): #判断在实例化类d中是否有对应字符串名映射的动态方法/静态属性,如eat/name。
func=getattr(d,choice) #获取实例化d中映射的动态方法/静态属性。
delattr(d,choice) #删除映射的静态属性/动态方法
func("骨头") #如果是动态方法就func()函数调用,如果是静态方法,就setattr(d,choice,"新的值")
else:
setattr(d,choice,bulk) #bulk可以是函数,也可是添加静态属性新的值。
a=getattr(d,choice)
a(d) #如果输入的字符串在类中没有映射的方法,就给类创建一个talk方法。
(二)网络通信:一个电脑最多65535个端口,一个网卡一个IP,一台电脑可以有多个网卡(IP)。
注意:socket.SOCK_RAW:修改IP地址头,可伪造IP地址。如实现'洪水攻击',
socket服务端与客户端模拟ssh通信:
(三)断言:后面的代码依赖前面的,需要断言,决定是否执行后面的代码。
如:assert type(a) is str
print("这段代码的打印是由断言的true/false决定的!")
相当于:if type(a) is not str:
exit()
print("这段代码的打印是由条件判断的true/false决定的!")