内置方法
# __xxx__
# 不需要自己调用
str : print(obj)调用这个对象的__str__方法,打印的实际上是__str__的返回值
repr: 如果打印一个对象,该对象没有实现str,就会调用repr,并打印它的返回值
new:构造方法,开辟空间,创建了对象/self
# 单例模式(背)
del:析构方法,在删除对象的之前调用,回收一些资源
class A:
def init(self):
sk = socket.socket()
sk.bind('127.0.0.1',9000)
self.sk = sk
self.f = open('file')
def del(self):
self.f.close()
self.sk.close()
a = A()
del a
call : obj()调用__call__方法
enter: 上下问管理,with语句中代码块之前执行的代码
exit : with语句中代码块之后执行的代码
eq : ==
class A:
def init(self,name,age):
self.name = name
self.age = age
def eq(self, other):
return self.name==other.name
a1 = A('alex',84)
a2 = A('alex',84)
a3 = A('wusir',73)
print(a1==a2)
class A:
def init(self,name,age):
self.name = name
self.age = age
def gt(self, other):
return self.age>other.age
a1 = A('alex3',85)
a2 = A('alex',84)
a3 = A('wusir',73)
# print(a1>a3)
l = [a1,a2,a3]
l.sort()
print([a.age for a in l])
getitem
class A:
def init(self,name,age):
self.name = name
self.age = age
def getitem(self, item):
return self.dict[item]
a = A('alex',84)
print(a.name)
print(a['age'])
getattr
class A:
def getattr(self, item):
print(item)
a = A()
a.name
几种方式实现单例模式
# 1.给类添加装饰器的方式
# 2.导入模块的方式
# 3.new的方式
# 4.元类重写元类的__call__方法
有一个类
# 它的对象如果调用一个属性,有这个属性,返回这个属性的值
# 如果没有这个属性,返回一个默认的值‘default’
# 他的对象如果调用一个方法,有这个方法,调用这个方法
# 如果没有这个方法,调用一个默认的default方法