首页 > 编程语言 >Python面向对象面试题

Python面向对象面试题

时间:2023-05-08 18:46:12浏览次数:32  
标签:__ 面试题 return Python self 面向对象 class def cls

1、简述面向对象的三大特性。

# 答案
封装:
  	封装指的是把一堆数据属性与方法数据放在一个容器中,这个容器就是对象。让对象可以通过 "." 来调用对象中的数据属性与方法属性。
    
继承:
  	继承指的是子类可以继承父类的数据属性与方法属性,并可以对其进行修改或使用。
    
多态:
  	在python中的多态指的是让多种类若具备类似的数据属性与方法属性,都统一好命名规范,这样可以提高开发者的代码统一性,使得调用者更方便去理解。

2、什么是鸭子模型?

# 答案
在python中不会强制性要求所有人的代码都统一规范,不统一也不会报错,若使用抽象类就会使python代码强制统一规范,这样不符合python动态语言的特性。所以让大家都自觉统一好规范,若大家的对象方法都类似的话就一种规范,只要长得像鸭子,就称之为鸭子类型。

3、super 的作用?

# 答案
'''
		使用super()可以在子类中调用父类的方法或属性, 可能你会说, 子类本来就可以调用父类中所有非私有的属性或方法,而我现在说的是, 当子类中实现了某个方法, 父类中也有这个方法, 当你调用这个方法时, 既想执行子类的又想执行父类的, 在这种情况下就可以使用super()
'''

4、mro 是什么?

# 答案
'''
		mro全称Method Resolution Order,指的是方法解析顺序。
		方法调用时就需要对当前类和基类进行搜索以确定方法所在的位置。而搜索的顺序就是所谓的「方法解析顺序」。
'''

5、什么是 c3 算法?

# 答案
'''
C3算法最早被提出是用于Lisp的,应用在Python中是为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性的问题。
本地优先级:指声明时父类的顺序,比如C(A,B),如果访问C类对象属性时,应该根据声明顺序,优先查找A类,然后再查找B类。
单调性:如果在C的解析顺序中,A排在B的前面,那么在C的所有子类里,也必须满足这个顺序。
'''

6、列举面向对象中带双下划线的特殊方法。

# 答案
#__setattr__: 添加/修改属性会触发它的执行
#__delattr__: 删除属性的时候会触发
#__getattr__: 只有在使用点调用属性且属性不存在的时候才会触发
# __getattribute__: 不管是否存在,我都会执行

7、双下划线和单下划线的区别?

# 答案
'''
"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量。
 
"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
'''

8、实例变量和类变量的区别?

# 答案
'''
类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
'''

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

# 答案
'''
Python的类就是个语法糖。一个函数写在类里面和写在类外面没有区别,唯一的区别就是参数,所谓实例方法就是第一个参数是self,所谓类方法就是第一个参数是class,而静态方法不需要额外的参数,所以必须区分。
'''

10、isinstance 和 type 的作用?

# 答案
'''
type和isinstance都可以判断变量是否属于某个内建类型
type只接收一个参数,不但可以判断变量是否属于某个类型,而且可以得到参数变量未知的所属的类型;而isinstance只能判断是否属于某个已知类型,不能直接得到变量未知的所属的类型
'''

11、有用过with statement(语句)吗?它的好处是什么?

# 答案
'''
with语句会在嵌套的代码执行之后,自动关闭文件。这种做法的还有另一个优势就是,无论嵌套的代码是以何种方式结束的,它都关闭文件。如果在嵌套的代码中发生异常,它能够在外部exception handler catch异常前关闭文件。如果嵌套代码有return/continue/break语句,它同样能够关闭文件。
'''

12、下列数据结构中,哪一种是不可迭代的

'''
    A.  dict
    B.  object
    C.  set
    D.  str
'''
 
# 答案:
B

13、实现一个Singleton单例类,要求遵循基本语言编程规范(用尽量多的方 式)。

# 答案:
1.__new__
class Borg(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            ob = super(Borg, cls)
            cls._instance = ob.__new__(cls, *args, **kwargs)
        return cls._instance
class MyClass(Borg):
    def __init__(self):
        self.a = 1
        
2.共享属性
class Borg2(object):
    _state = {}
 
    def __new__(cls, *args, **kwargs):
        ob = super(Borg2, cls).__new__(cls, *args, **kwargs)
        ob.__dict__ = cls._state
        return ob
 
class MyClass(Borg2):
    def __init__(self):
        self.a = 1
        
3.装饰器
def singleton(cls, *args, **kwargs):
    instances = {}
 
    def getinstance():
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
 
    return getinstance
 
@singleton
class MyClass(object):
    def __init__(self):
        self.a = 1
 
4.import方法
# mysingleton .py
class MyClass(object):
    def __init__(self):
        self.a = 1
 
s_myclass = MyClass()
 
from mysingleton import s_myclass
 
s_myclass.a
 

14、请

标签:__,面试题,return,Python,self,面向对象,class,def,cls
From: https://www.cnblogs.com/ycmyay/p/17382797.html

相关文章

  • Python网络并发面试题
    1、python的底层网络交互模块有哪些?#答案:'''socket,urllib,urllib3,requests,grab,pycurl'''2、简述OSI七层协议。#答案:'''应用层:HTTP,FTP,NFS表示层:Telnet,SNMP会话层:SMTP,DNS传输层:TCP,UDP网络层:IP,ICMP,ARP,数据链路层:Ethernet,PP......
  • Python模块面试题
    1.列举常用的模块。基础:os,sys,time,datetime,json,pickle,randon,hashlib,re,math,logging爬虫:requests,BeautifulSoup,xpath,gevent,asyncio,twisted数据分析:pandas,numpy,scipy,matplotlib,seaborn等。。。2.如何安装第三方模块?pip3install模块名称3.re的ma......
  • Python设计模式面试题
    单例模式1请手写一个单例#encoding=utf8importthreadingimporttime#这里使用方法__new__来实现单例模式classSingleton(object):#抽象单例def__new__(cls,*args,**kw):ifnothasattr(cls,'_instance'):orig=super(Singleton,cls)......
  • python selenium 元素定位方法
    1.通过元素的id属性进行元素定位,在html中元素的id是唯一的定位方法:find_element_by_id(id)fromseleniumimportwebdriver#创建WebDriver对象,指明使用chrome浏览器驱动wd=webdriver.Chrome()#调用WebDriver对象的get方法可以让浏览器打开指定网址wd.get('ht......
  • python 打包
    1,单文件打包pyinstaller-F-wfile.py-F:-w::启动exe文件,不显示控制台2,多文件打包 文件结构:testmain.pyset.py如果使用:pyinstaller-F-wmain.py发生问题:相互依赖的文件,打包后无法引用,导致报错可以使用:pyinstaller-Dmain.py-pset.py假......
  • Python绘制雷达图
    基本步骤创建一个axe对象,创建时设置参数polar为True以使用极坐标系绘制图像示例代码frommatplotlibimportpyplotaspltax=plt.subplot(111,polar=True)#设置绘制极坐标xs=['a','b','c','d','e','a']ys=[1,2,4,3,1,1......
  • 肉身布莱特-感知机python实现
    一、代码:做线性拟合importnumpyasnpfrommatplotlibimportpyplotasplt#很简单的一个体积增大和毒气量的关系拟合virulence=np.random.rand(100)volume=np.random.rand(100)virulence.sort()volume.sort()plt.scatter(volume,virulence)w=0b=0alp......
  • 用Python语言进行时间序列ARIMA模型分析
    应用时间序列时间序列分析是一种重要的数据分析方法,应用广泛。以下列举了几个时间序列分析的应用场景:1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向。例如,利用历史股市数据和经济指标进行时间序列分析,可以预测未来股市的走向。2.交通拥堵预测:时间......
  • python快速直白入门(半新手向,老手复习向)
    主用python做项目有一段时间,这次简单总结学习下。为后面的项目编写,进行一次基础知识的查缺补漏、1、变量名和数据类型"""变量名,只能由"数字、大小写字母、_"组成,且不能以数字开头"""#整数int#hashable,不可变对象a=5#浮点数float#hashable,不可变对象a1=3......
  • (python) 数据库一次 Connection 连接,不同 cursor
    数据库一次Connection连接,不同cursor的最简洁代码:importpymysqlclassDatabase(object):connection=Nonedef__init__(self):ifnotDatabase.connection:Database.connection=pymysql.connect(host="127.0.0.1",......