zoukankan      html  css  js  c++  java
  • 第三模块 面向对象& 网络编程基础 实战考核

    1、简述构造方法和析构方法。

    构造方法(__init__):主要作用是实例化时给实例一些初始化参数,或执行一些其它的初始化工作,总之因为这个__init__只要一实例化,

    就会自动执行,不管你在这个方法里写什么,它都会统统在实例化时执行一遍。

    __del__就是析构方法。

    实例在内存中被删除时,会自动执行这个方法,如你在内存里生成了一个人的实例,现在他被打死了,那这个人除了自己的实例要被删除外,

    可能它在实例外产生的一些痕迹也要清除掉,清除的动作就可以写在这个方法里。

    2、口述一下在python3.6环境下的结果。口述一下在python2.7环境下的结果。

    在python3.6下执行的结果 : from D 
    [A  E B C object]

    在python2.7下执行的结果:from D 
    然后抛出异常 ,经典类没有mro属性

    3、 静态方法和类方法的区别是什么?

    静态方法:staticmethod  ,对象和类都可以调用,没有自动传值一说。

    类方法:classmethod, 类调用时会交类本身当作第一个参数传入。对象调用时也会交类本身当作第一个参数传入。

     4、简述__new__和__init__的区别 

    答:1、__new__是一个静态方法。类实例化时第一个执行,执行完后才执行__init__,继承自object的新式类才有__new__

    2、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别

    3、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类

    (通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例

    4、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值

    5、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,

    ;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。

     
     5、简述什么是反射,以及实现反射的方法。 
    答:反射就是通过字符串的形式操作对象相关的属性。
    hasattr(obj,name)
     
    func= getattr(obj,name)
    func() #getattr 必须要赋值给变量,然后再执行
     
    setattr(obj,name,value) 
     
    delattr(obj,name)
     
    6、 简述什么是socket,什么是黏包,黏包的原因是什么?
     答:socket 是应用层与tcp/ip协议族通信的中间软伯抽象层,它是一组接口,在设计模式中,socket其实就是一个门面模式。
    它把复杂的TCP/IP协议族隐藏Socket接口后面,对用户来说,一组简单的接口,就是全部。
    包:数据粘在一起,主要因为:接收方不知道消息之间的界限,不知道一次性提取
    多少字节的数据造成的数据量比较小,时间间隔比较短,就合并成了一个包
     
     
    编程题
     1、编写一个学生类,要求有一个计数器的属性,统计总共实例化了多少个学生。 
    class Student:
        __count = 0
    
        def __init__(self,name):
            self.name = name
            Student.__count += 1
    
        def eat(self):
            print("%s is eating"%self.name)
    
        def tell_info(self):
            print("一共实例化了%s 个学生"%Student.__count)
    s1 = Student("alex")
    s2 = Student("andyzhnag")
    s3 = Student("fengfeng")
    s2.tell_info()
     
    2、 写一个客户端调用服务端系统命令的程序。 
    服务端
    import socket
    import subprocess
    import struct
    
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.bind(("127.0.0.1",8080))
    server.listen(5)
    
    while True:#链接循环
        print("start...")
        conn,addr=server.accept()
        print(addr)
        while True:#通信循环
            cmd = conn.recv(1024)
            res = subprocess.Popen(cmd.decode("utf-8"),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
            stdout = res.stdout.read()
            stderr = res.stderr.read()
    
            conn.send(stdout)
            conn.send(stderr)
        conn.close()
    server.close()
    View Code

    客户端

    import socket
    
    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    ip_port = ("127.0.0.1",8080)
    
    print("start...")
    client.connect(ip_port)
    
    while True:
        cmd = input("请输入命令:")
        client.send(cmd.encode("utf-8"))
    
        msg = client.recv(8096)
        print(msg.decode("gbk"))
    View Code
     
     
     3、加工标准类型,写一个类,继承列表,实现以下功能:
      1. 初始化时传递一个标志位,标志位默认为None,不为None时,可以使用clear()方法清空列表中的元素。
      2.添加元素时,只能添加字符串,其余类型则报错。
      3. 实现获取中间值的属性。 
     
    class List(list):
    def __init__(self,char,tag = None):
    for i in char:
    if not isinstance(i,str):
    raise TypeError("传入的值必须为字str")
    else:
    super().__init__(char)
    self.tag = tag

    def clear(self):
    if self.tag:
    super().clear()
    else:
    print("标志位不允许删除")

    def mid(self):
    half_mid = len(self) //2
    return self[half_mid]

    l = List(["alex","egon","fengfeng","andyzhang"])
    print(l)
    print(l.mid())
    l.clear()
    l.tag = True
    l.clear()
    print(l)
     
    #仅供学习,不要拿去路飞闯关考试作弊哟。 python交流QQ:249139540 加我注明python 
  • 相关阅读:
    legend2---开发日志12(vue如何进一步学习)
    为什么现在的年轻人生育的欲望越来越低?(转自知乎)
    legend2---开发日志13(layer_mobile的content传入dom 出现【object object】如何解决)
    legend2---项目总结(legend2的意义)
    legend2---开发日志11(如何提高终极开发效率)
    公司项目架构的演变过程(转)
    创业公司如何实施敏捷开发(敏捷开发简单流程)(转)
    创业公司一年工作总结(转)(公司失败原因)
    LayaAir引擎开发HTML5最简单教程(面向JS开发者)
    [ACM] HDU 2295 Radar (二分法+DLX 重复覆盖)
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/9816742.html
Copyright © 2011-2022 走看看