315道面试题【57-70】

57、谈谈你对面向对象的理解?

面向对象就是将一些零散的具有相同功能的属性方法通过类封装起来,实现模块化
https://blog.csdn.net/qq_37275405/article/details/80979592

58、Python面向对象中的继承有什么特点?

  1. 在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#
  2. 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
  3. Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
    https://blog.csdn.net/qq_37275405/article/details/80979592

59、面向对象深度优先和广度优先是什么?

pass

60、面向对象中super的作用?

  • super不是一个关键字,也是不是有函数,他是一个类
  • super()的作用不是查找父类,而是找MRO列表的上一个类
  • super()和父类没有任何实质性的关系,只是有时候能调用到父类而已。
  • 在单继承的情况下,super()永远调用的是父类/父对象
  • super()多用于菱形继承
    格式:
    super().方法() #python3的格式

61、是否使用过functools中的函数?其作用是什么?

functools用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标。

62、列举面向对象中带双下划线的特殊方法,如:newinit

__init__初始化魔术对象,当一个对象被实例化是自动触发
__new__ 当一个对象被实例化前自动触发,通过传递参数判断对象是否被创建或其他
__del__当一个对象没有任何引用是被触发,回收内存
__call__将对象当作函数调用时触发

63、如何判断是函数还是方法?

函数:
函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用。
方法:
方法和函数类似,同样封装了独立的功能,但是方法是需要通过对象来调用的,表示针对这个对象要做的操作,使用时采用点方法。

64、静态方法和类方法区别?

实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3可以传递任意对象,其他版本会报错)。

三种方法从不同层次上来对方法进行了描述:实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义,而静态方法则不能继承,可以认为是全局函数。

65、列举面向对象中的特殊成员以及应用场景

魔术方法 用于在某一时刻调用时

66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数

     for x in range(1,5):
         for z in range(1,5):
             if i!=x and i!=z and x!=z:
                 print(i,x,z)

67、什么是反射?以及应用场景?

本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!
具体请参考:https://www.cnblogs.com/yooma/p/8004788.html

68、metaclass作用?以及应用场景?

元类就是创建类这种对象的东西

69、用尽量多的方法实现单例模式。

class Earth(object):
    __instance=None #定义一个类属性做判断

    def __new__(cls):

        if cls.__instance==None:
            #如果__instance为空证明是第一次创建实例
            #通过父类的__new__(cls)创建实例
            cls.__instance==object.__new__(cls)
            return  cls.__instance
        else:
            #返回上一个对象的引用
            return cls.__instance

a = Earth()
print(id(a))
b = Earth()

70、装饰器的写法以及应用场景。

装饰器是一个工厂函数,接受一个函数作为参数,然后返回一个新函数,其闭包中包含被装饰的函数。有了装饰器,可以提取大量函数中与本身功能无关的类似代码 ( 这块在Flask中用于定义路由的@app.route,就是一个很好的例子),达到代码重用的目的。可应用于插入日志、性能测试、事务处理等方面。

def deco(func):
    def warpper(*args, **kwargs):
        print(‘start‘)
        func(*args, **kwargs)
        print(‘end‘)
    return warpper

@deco
def myfunc(parameter):
    print("run with %s" % parameter)

myfunc("something")

猜你喜欢

转载自blog.csdn.net/qq_37275405/article/details/80989362