面向对象相关面试题及特殊方法

单例模式:必考

 1 # 设计模式: 单例模式. 最简单的设计模式. 面试必考,默写.
 2 # 单例模式: 对一个类是能实例化一个对象.
 3 
 4 class A:
 5     __instance = None
 6     def __new__(cls, *args, **kwargs):
 7         if A.__instance is None: #初次进入满足该条件
 8             obj = object.__new__(cls)  #利用object 创建一个对象空间 给obj
 9             A.__instance = obj #将对象空间obj赋值给类的私有静态字段__instance
10         return A.__instance
11 
12 a = A()
13 b = A()
14 c = A()
15 print(a,b,c)

生成一个数字、字母混合的随机五位数:

 1 import random
 2 def v_code():
 3     code = ''   #初始化一个空字符串用来接收随机的数字、字母组合
 4     for i in range(5):
 5 
 6         num=random.randint(0,9)
 7         alf=chr(random.randint(65,90)) #chr函数能够拿到26个字母,字母对应的ascii值可以用来排序
 8         add=random.choice([num,alf])   #随机生成数字、字母混合的组合体
 9         code="".join([code,str(add)])  #join的用法
10 
11     return code
12 
13 print(v_code())

  Python面向对象相关特殊方法:

#__call__

 1 *** __call__
 2 class A:
 3     def __init__(self):
 4         pass
 5     def func(self):
 6         print(111)
 7 
 8     def __call__(self, *args, **kwargs):
 9         '''各种代码'''
10         # print(666)
11         print(args)
12         return 'wusir'
13 a1 = A()
14 print(a1(1,2,3))  # 对象() 自动执行类中的__call__方法

#__str__   __repr__

 1  __str__    __repr__
 2 class A:
 3     def __init__(self,name,age):
 4         self.name = name
 5         self.age = age
 6 
 7     def __str__(self):
 8         return 'alex'
 9 a1 = A('oldboy',1000)
10 # print(a1)  # <__main__.A object at 0x000000000237E908>
11 print(str(a1),type(str(a1)))  # '<__main__.A object at 0x000000000237E908>'
12 class A:
13 
14     def __init__(self):
15         pass
16     def __str__(self):
17         print(666)
18         return '太白'
19 a = A()
20 print(a)  # 打印对象,就会触发类中__str__方法
21 str(a) # str(a),就会触发类中__str__方法
22 print('打印此类对象:%s' % a)  # 格式化输出 '%s'a
23 
24 
25 class A:
26     def __init__(self):
27         pass
28     def __repr__(self):
29         return '太白'
30 a = A()
31 print(repr(a))
32 print('%r'%a)
33 
34 msg = '飞哥说他是%s,他真%r,%s,%s'  % ('sb','NB',666,6.66)
35 print(msg)

#__eq__

 1 class A:
 2     def __init__(self):
 3         self.a = 1
 4         self.b = 2
 5 
 6     def __eq__(self,obj):
 7         if self.a == obj.a and self.b == obj.b:
 8             return True
 9 
10 a1 = A()
11 b1 = A()
12 print(a1 == b1)  # 对一个类实例化的两个对象进行比较运算的时候,他会自动触发类中的__eq__

python垃圾回收机制
:文件中你创建的所有的变量,类等等.执行完毕之后,
一段时间内如果没有用到, 他会自动在内存中去除.
深入研究: 他会将你的所有变量,类等等做个标记,在一段时间之内,没有被调用,则就会自动回收.

 1 # *** __new__ : object产生并返回一个对象空间.
 2 # 自己定义的__new__ 第一个参数自动接收类空间.
 3 #
 4 # 执行顺序:先执行__new__方法,然后在执行__init__方法
 5 class A:
 6     def __init__(self):
 7         self.x = 1
 8         print('in init function ')
 9 
10     def __new__(cls, *args, **kwargs):
11         print(cls)  # <class '__main__.A'>
12         print('in new function ')
13         # return object.__new__(cls)  # 调用object类中的__new__方法,产生一个真正的对象空间
14         return super().__new__(cls)  # 返回给 A()
15 # object
16 a1 = A()
17 print(a1)
18 # 类名() 自动执行类中__new__   #类中没有,则找到object
19 # 找到__new__ 这个方法是产生一个对象空间,自动执行类中的__init__,给这对象空间封装一些属性,
20 # 最后返回给A() 然后给 变量a1
21 print(a1.x)
class A1:
    def __new__(cls, *args, **kwargs):
        '产生对象空间'
        pass

class B(A1):
    def __init__(self):
        self.x = 1
    def __new__(cls, *args, **kwargs):
        print('B1')
        
b1 = B()
print(b1)
# 最详细版本:
'''
1,类名() 执行 __new__方法,先从自己的类中寻找,
如果没有找到,则从父类(直到object类)寻找,然后从object的__new__产生一个对象空间,返回给类名().
2,对象空间一旦产生并返回.则自动执行__init__方法,给这个对象空间封装属性.
3,最终你得到是封装好属性的对象空间.'''
认真做一件事,并将之完全学会掌握为止!
原文地址:https://www.cnblogs.com/wr13640959765/p/9242062.html