单例模式:必考
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,最终你得到是封装好属性的对象空间.'''