python-Day7
一、多态
多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式。。python不支持多态,它本身就是多态语言。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 class Animal: 4 def __init__(self,name): 5 self.name = name 6 def talk(self): 7 raise NotImplementedError("Subclass must implement abstract method") 8 9 class Cat(Animal): 10 def talk(self): 11 return 'Meow!' 12 13 class Dog(Animal): 14 def talk(self): 15 return 'Woof! Woof!' 16 17 def animal_talk(obj): 18 print(obj.talk()) 19 20 c = Cat('11') 21 d = Dog('22') 22 23 animal_talk(c) 24 animal_talk(d)
二、反射
我们可能需要对数据对象的字段赋值,但我们无法预知用到这个数据对象都有些什么字段,换言之,我们需要通过某种机制访问未知的属性,这个机制被称为反射。
#!/usr/bin/env python # -*- coding:utf-8 -*- import sys class WebServer(object): def __init__(self,host,port): self.host = host self.port = port def start(self): print('Server is starting...') def stop(self): print('Server is stopping...') def restart(self): self.stop() self.start() def test_run(name): print('running...',name) if __name__ == '__main__': server = WebServer('localhost',333) #print(sys.argv[1]) if hasattr(server,sys.argv[1]): #判断 func = getattr(server,sys.argv[1]) #获取server.start内存地址 func() #server.start() setattr(server,'run',test_run) server.run('Jef')
三、socket
socket 是网络连接端点。例如当你的Web浏览器请求A地址上的主页时,你的Web浏览器创建一个socket并命令它去连接A地址的Web服务器主机,Web服务器也对来自的请求在一个socket上进行监听。两端使用各自的socket来发送和接收信息。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import socket 4 5 ip_port = ('127.0.0.1',9999) 6 7 sk = socket.socket() 8 sk.bind(ip_port) 9 sk.listen(5) 10 11 while True: 12 print('server waiting...') 13 conn,addr = sk.accept() 14 15 client_data = conn.recv(1024) 16 print(str(client_data,'utf8')) 17 conn.sendall(bytes('不要回答,不要回答,不要回答','utf8')) 18 19 conn.close()
#!/usr/bin/env python # -*- coding:utf-8 -*- import socket ip_port = ('127.0.0.1',9999) sk = socket.socket() sk.connect(ip_port) sk.sendall(bytes('请求占领地球','utf8')) server_reply = sk.recv(1024) print(str(server_reply,'utf8')) sk.close()