Python面试题面向对象
第四章 面向对象
- 简述面向对象的三大特性。
答:面向对象的三大特性,封装/继承/多态
- 什么是鸭子模型?
答:有多个类,它们没有继承关联关系,但是定义的方法和调用方式相同,这就是鸭子类型.遵守了同样的方式
- super的作用?
答:能够自动找到要继承的类,使用super就可以省去自己定义要继承那个类
- mro是什么?
答:MRO是一种算法 也是(方法解析顺序)
- 什么是c3算法?
答:c3算法是多重继承的一种算法,使用了c3就是生成一个线性序列
- 列举面向对象中带双下划线的特殊方法。
答:
- 双下划线和单下划线的区别?
答:双下划线是程序中规定的私有的
单下划线是程序员们约定这是一种私有的
- 实例变量和类变量的区别?
答:实例变量就是将我们设定的变量存储在实例开辟的一块空间中
类变量是将我们设定的变量存储在类开辟的一块空间中,他们的区别就是不是同一块空间
- 静态方法和类方法区别?
答:
- isinstance和type的作用?
答:isinstance是判断某个对象是什么类型
type是查看某个对象是什么类型
- 有用过with statement(语句)吗?它的好处是什么?
答:用过 with open 它的好处就是操作文件的时候不需要自己手动关闭文件
它使用了python面向对象中上下问管理系统
- 下列数据结构中,哪一种是不可迭代的
- A. dict
B. object
C. set
D. str
答:B
- 实现一个Singleton单例类, 要求遵循基本语言编程规范(用尽量多的方式)。
- 请描述with的用法, 如果自己的类需要支持with语句, 应该如何书写?
答:with的用法就是 with一个关键字 后边跟上自己定义的函数,然后as去赋值一个句柄
- python中如何判断一个对象是否可调用? 那些对象可以是可调用对象?如何定义一个类, 使其对象本身就是可调用对象?
答:
- 请实现一个栈。
答:
- 关于Python类的继承不正确的说法是?(多选)
-
A.
Python类无法继承
B. 可以继承, 无法执行父类的构造函数
C. 可以有多个父类
D. 只能有一个父类
答:ABD
- 实现一个hashtable类, 对外暴露的有add和get方法, 满足以下测试代码
答:
- 请用两个队列来实现一个栈(给出伪代码即可)
答:
- 已知如下链表类, 请实现单链表逆置
答:
- 类的加载顺序(类中有继承有构造有静态)?
- 参考下面代码片段
请在Context类下添加代码完成该类的实现
- 以下代码输出是什么? 请给出答案并解释。
答:1,1,1
1,2,1
3,1,3
- 函数del_node(self,data)的功能: 在根节点指针为root的二叉树(又称二叉排序树)上排除数值为K的节点,若删除成功,返回0,否则返回-1, 概述节点的定义类型为
- 请给出下面代码片段的输出,请简述上面代码需要改进的地方?
- 请简单解释Python中的static method(静态方法)和class method(类方法),并将以下代码填写完整。
- 已知一个订单对象(tradeOrder)有如下字段:
字段英文名 |
中文名 |
字段类型 |
取值 |
Id |
主键 |
Long |
123456789 |
Name |
姓名 |
String |
张三 |
Items |
商品列表集合 |
List<商品>(关联商品) |
查找商品对象,一个订单有两个商品。商品字段任意取值。 |
IsMember |
是否是会员 |
Boolean |
True |
CouponAmount |
优惠券金额 |
Bigdecimal |
Null |
商品对象
字段英文名称 |
中文名 |
字段类型 |
取值 |
Id |
主键 |
Long |
987654321 |
Name |
商品名称 |
String |
手机 |
问题:若将订单对象转成JSON格式,请书写出转换后的JSON字符串。
- 写代码(栈与队列)
编程实现一个先进先出的队列类, 能指定初始化时的队列大小, 以及enqueue,dequeue,isempty, isfull四种方法
使用方法如下