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()
server
#!/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()
client

 

posted @ 2016-03-12 14:26  Jef-J  阅读(76)  评论(0编辑  收藏  举报