月考二——试题

6.判断一个对象是否属于str类型,判断一个类是否是另外一个类的子类?
    答案: - isintance, issubclass

7.定义一个老师类,定制打印对象的格式为‘<name:C_DSB age:18 sex:male>’
    答案: -
.定义一个自己的open类,控制文件的读或写,在对象被删除时自动回收系统资源
    答案: - class Open:
               def __init__(self):
                   self.f = open(file_name, mode, encoding)
               def __del__(self):
                   self.f.close()

11.__str__的作用是什么?
    答案: - 在打印对象时触发,必须要return一个字符串,用于作为打印对象的结果

14.类中的 __getattr__ 方法什么时候被执行?
    答案: - 在对象.属性的时候,对象没有的时候触发。
    __getattr__(self,name) 定义当用户获取一个不存在的属性时的行为。
    当实例对象调用不存在的属性时,就会执行__getattr__(self,name)下面的代码,如果在类中没重载__getattr__(self,name)方法,则会抛出AttributeError异常

15.什么是抽象类?
    答案: - 抽象就是将三个类的属性提取出来写在一个类中,并且所有子类继承抽象类强制遵循抽象类中的属性与方法。

21.什么是面向对象三大特性?分别的作用是什么?
    答案:
        继承:
            子类继承父类的属性或方法,并且可以派生出自己的新的属性与方法,减少代码冗余
        封装:
            将数据属性与方法封装到对象中,通过对象.的方式就能获取
        多态:
            让子类遵循父类的规范

23.__getattrubite__在什么时候触发?
    答案: -在对象.属性时,无论属性是否存在都会触发

get 仅在作为类属性的值且被访问时,经过此函数
getattribute
已存在的属性
若不存在属性getattr
有关博客:https://www.jianshu.com/p/4e34c9b2fdc3

24.__call__在什么时候触发?
    答案: -在调用对象,对象()时触发。

26.如何用元类控制类的创建,请写代码?
    class Mymetaclass(type):
        def __new__(cls, name, bases, attrs):
            update_attrs = {}
            for k, v in attrs.items():
                # callable(方法) 判断是否是可调用的函数或方法
                # 不是 方法 与 私有属性, 都将属性名改为大写
                if not callable(v) and not k.startswith('__'):
                    update_attrs[k.upper()] = v
                else:
                    update_attrs[k] = v
            return type.__new__(cls, name, bases, update_attrs)

    class Chinese(metaclass=Mymetaclass):  # Mymetaclass()
        country = 'China'
        tag = 'Legend of the Dragon'  # 龙的传人

        def walk(self):
            print('%s is walking' % self.name)
原文地址:https://www.cnblogs.com/pythonwl/p/12761834.html