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


    单例模式:必考

     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,最终你得到是封装好属性的对象空间.'''
    认真做一件事,并将之完全学会掌握为止!
  • 相关阅读:
    程序安装打包
    sql 2005 分页存储过程
    带线的无限级下拉树列表
    MapXtreme 2005 学习心得 概述(一)
    存储过程中用到的年,月,周的函数
    委托/事件/线程传参简单理解
    清除svn/vss小工具
    查看数据库连接数
    MapXtreme 2005 学习心得 使用WebTool工具(七)
    C#日期格式化
  • 原文地址:https://www.cnblogs.com/wr13640959765/p/9242062.html
Copyright © 2020-2023  润新知