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 
  • 相关阅读:
    e621. Activating a Keystroke When Any Child Component Has Focus
    e587. Filling Basic Shapes
    e591. Drawing Simple Text
    e595. Drawing an Image
    e586. Drawing Simple Shapes
    e636. Listening to All Key Events Before Delivery to Focused Component
    在 PL/SQL 块的哪部分可以对初始变量赋予新值? (选择1项)
    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
    你判断下面语句,有什么作用?(单选)
    Oracle数据库表空间与数据文件的关系描述正确的是( )
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/9816742.html
Copyright © 2011-2022 走看看