一、__new__方法
class A(object):
def __init__(self):
print("hello")
a = A()
class Person:
def __init__(self):
print('yuan')
def __new__(cls, *args, **kwargs):
print(cls)
return object.__new__(cls)
print(Person)
a = Person()
class Person:
pass
a = Person()
b = Person()
print(id(a))
print(id(b))
class A:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance == None:
cls._instance = object.__new__(cls)
return cls._instance
else:
return cls._instance
a = A()
b = A()
print(id(a))
print(id(b))
二、定制属性访问
增:
re .aaa = 1
setattr(re, 'bbb', 2)
re.__setattr__('ccc', 3)
删:
delattr(re , 'ccc')
re .__delattr__('bbb')
del re
改:
setattr(re , 'length', 6)
re .__setattr__('length', 5)
查:
hasattr(re, 'length')
getattr(re, 'length')
re . __getattribute__('length')
class Person:
def __init__(self,name):
self.name = name
a = Person('qiye')
print(hasattr(a,'name'))
print(getattr(a,'name'))
print(a.__getattribute__('name'))
setattr(a,'name','b')
print(a,'name')
setattr(a,'age',9)
delattr(a,'name')
三、描述符
class A:
def __get__(self, instance, owner):
print('get')
def __set__(self, instance, value):
print('set')
def __delete__(self, instance):
print('deleat')
class B:
a = A()
b = B()
b.a
b.a = 'laowang'
四、装饰器
def girl():
return '这是一个女孩'
a = girl()
print(a)
def modify(func):
result = func()
return result + ',他叫小芳'
j = modify(girl)
print(j)
def modify(func):
def wrapper():
result = func()
return result + ',他叫小芳'
return wrapper
g = modify(girl)
print(g())
@modify
def girl():
return '这是一个女孩'
e = girl()
print(e)
@ modify
def girl():
return '这是一个女孩'
e = girl()
print(e)
class Person:
@ property
def run(self):
print('人在跑')
a = Person ()
a.run
class Person:
@ staticmethod
def run():
print('人在跑')
b = Person()
b.run
class Person:
@ classmethod
def world(cls):
print('hello world')
Person.world()
class Myclss:
def __init__(self,func):
self.func = func
def __call__(self, *args, **kwargs):
print("__开始验证__")
return self.func()
@ Myclss
def func():
print("__正在登陆__")
func()
class Test_Class:
def __init__(self, func):
self.func = func
def __call__(self):
print('类')
return self.func
@Test_Class
def fun_test():
print('这是个测试函数')
fun_test()