zoukankan      html  css  js  c++  java
  • 面向对象重点面试题

    1、mro是什么?

    """
    mro 全称Method Resolution Order,也就是方法解析顺序
    方法调用时会对当前类和基类进行搜索用来确定方法所在的位置。而搜索的顺序也就是所谓的方法解析的顺序
    """
    

    2、广度优先深度优先

    """
    多继承情况下造成 “钻石继承”
    
        mro的查找顺序:
            - 新式类:
                - 广度优先
    
            - 经典类:
                - 深度优先
                
        -新式类:广度优先
        -经典类:深度优先
    """
    

    3、列举面向对象中你苏知道的带双下划线的魔法方法

    """
    __new__:在__init__触发前,自动触发
    __init__:在调用类时自动执行
    __getattr__:在“对象.属性”获取属性时,若“属性没有”时触发
    __getattribute__:在“对象.属性”获取属性时,无论“属性有没有”都会触发
    __setattr__:当对象.属性=属性值 ,添加或修改属性时触发
    __call__:在调用对象即 “对象+()”时触发
    """
    

    4、实现一个singleton单例类,尽可能写多个方法(重要)

    """
    单例:单例主要是为了解决 当我们确定"类中的属性与方法"不变时,反复调用该类,产生不同的对象,会产生不同的内存地址,会造成资源浪费。
    那单类就是让所有类在实例化时,都指向同一个内存地址
    
    方式1、__new__
    class Singleton:
    	__instance = None
    	
    	def __new__(cls,*args,**kwargs):
    		if not cls.__instance:
    			cls.__instance = object.__new__(cls)
    			
    		return cls.__instance
    		
    obj1 = Singleton()
    obj2 = Singleton()
    
    
    方式2、classmethod
    class Singleton:
    	__instance = None
    	
    	@classmethod
    	def singleton(cls):
    		
    		if not cls.__instance:
    			cls.__instance = cls()
    			
    		return cls.__instance
    
    obj1 = Singleton.singleton()
    obj2 = Singleton.singleton()
    
    方式3、装饰器
    def singleton(cls):
    	
    	__instance = {}
    	
    	def inner(*args, **kwargs):
    		if cls not in __instance:
    			obj = cls(*args, **kwargs)
    			__instance[cls] = obj
    		
    		return __instance[cls]
    	return inner
    	
    @singleton
    class Func:
    	pass
    
    print(Func())
    print(Func())
    
    
    方式4、导入
    先定义一个名为singleton的py文件
    class Singleton:
    	pass
    
    obj = Singleton()
    
    
    # 导入
    from signleton import obj
    print(obj)
    from signleton import obj
    print(obj)
    	
    """
    

    5、with上下文管理器

    """
    with语句会在代码执行之后,无论我们的代码以何种方式结束的,都可以自动的帮我们关闭文件
    那这样做的好处是:如果你嵌套的代码中发生异常,它能够在异常前关闭文件,如果你嵌套的代码中有return/break等语句,也可以帮我们关闭文件
    
    
    自定义上下文管理器:
    	得实现__enter__()和__exit__()方法
    	__enter__():进入上下文管理器时运行
    	_exit__():退出我们之前上下文管理器中运行的上下文,返回一个一个布尔值
    """
    

    6、面向对象三大特性

    """
    封装,继承,多态
    
    封装:封装指定是把一堆属性和方法放在一个容器中,这个容器就是对象,让对象可以通过.的方式来调用对象的属性和方法
    
    继承:继承指的是子类可以继承父类的属性与方法,并且也可以对其进行修改与使用
    
    多态:多态也称之为多态性,其目的就是在在不知道对象具体类型的情况下,让多种类具备类似的向属性与方法,统一对象调用方法的规范
    多态有三种表现形式:继续父类,继承抽象类,鸭子类型
    """
    
  • 相关阅读:
    Python基础之内存管理与垃圾回收机制
    Git常用命令
    Git分支操作
    码云配置SSH公钥
    Git基本操作
    Git基本理论
    版本控制
    Python基础之Python语法
    成为一名JAVA高级工程师你需要学什么【转】
    一个java高级工程师的进阶之路【转】
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12615133.html
Copyright © 2011-2022 走看看