1 类 class 和元类 metaclass 的有什么区别?
元类就是创建类的类
2 类实例化时候,init 和 new 方法有什么作用?
init是初始化的方法,初始化类的一些基本信息,如给变量赋值
new是实例化的方法,创建类的具体实例,重写new可以实现单例模式
3 实例方法、类方法和静态方法有什么不同?
实例方法就是类中的普通方法,由实例对象调用
类方法只能访问类变量,不能访问实例变量
静态方法其实和类没有关系,不能直接调用类的属性,如果非说有关系的话,就是通过类来调用
4 类有哪些常用的魔法属性以及它们的作用是什么?
__init__()初始化方法
__new__()实例化方法
__doc__显示函数的文档字符串信息
__module__显示类定义的位置
__dict__显示对象的所有属性和方法
5 类中的 property 属性有什么作用?
可用于装饰函数,被装饰的函数在调用方式就可以像调用普通变量一样
6 描述一下抽象类和接口类的区别和联系?
抽象类要被子类继承,接口要被类继承
抽象类和接口类都不能直接实例化
接口类只能做方法声明,抽象类可以做方法声明也可以做方法实现
抽象类中的抽象方法必须全部由其子类实现,如果子类不能够完全实现抽象类中的所有方法,那么该类只能还是抽象类,接口类也类似,继承接口的类如果不能完成实现接口中的所有方法,那么该类还是抽象类
7 类中的私有化属性如何访问?
在类中写一个函数,来返回私有属性
class A(object):
__x = 2
def get_x(self):
return self.__x
8 类如何才能支持比较操作?
#比较运算符重载,重新实现类中的__lt__()、__gt__()、le、ge、eq、ne
#使用functools下的装饰器,total_ordering
from functools import total_ordering
@total_ordering
class Rect(object):
def __init__(self,x,y):
self.x=x
self.y=y
def area(self):
return self.x*self.y
def __lt__(self,other):
return self.area()<other.area()
a = Rect(3,4)
b=Rect(4,5)
print(a<b)
9 hasattr()、getattr()、setattr()、delattr()分别有什么作用?
反射相关的函数
hasattr():判断类中是否有该方法
getattr():获得类中的该方法
setattr():在类中设置方法
delattr():在类中删除该方法