python3.5入门笔记(二)--------反射、断言与socket通信

(一)反射:如根据输入的字符串判断、设置、删除,获取在类中有映射对于的动态方法/静态属性。即将字符穿反射在类属性/方法在内存的地址。

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决定的!")

猜你喜欢

转载自blog.csdn.net/qq_42231156/article/details/82821738