首页 > 其他分享 >钩子函数

钩子函数

时间:2022-11-15 11:26:31浏览次数:73  
标签:__ 26 函数 钩子 print cls overwrite name

控制子类的的创建

1、元类

  这种方式可能是最常见的也是我们最先知晓的,当然这种方式可能需要我们对元类有比较深入的了解,所以引入了下面的这种方式

2、钩子函数

  __init__subclass__,字面意思,父类实现了该双下方法,其后凡是继承他的派生类,都会触发此方法,进行派生类的初始化,实现派生类属性的增加及修改

 1 class Meta:
 2     def __init_subclass__(cls, **kwargs):
 3         # 改变子类行为,增加类属性
 4         cls.origin_val = "只有永不遏制的奋斗"
 5         for k in kwargs:
 6             setattr(cls, k, kwargs[k])
 7 
 8         # 增加类方法
 9         def overwrite():
10             print("测试")
11 
12         setattr(cls, "func", overwrite)
13 
14 
15 class A(Meta, name="g", age=26):
16     ...
17 
18 
19 class B(Meta):
20     ...
21 
22 
23 if __name__ == '__main__':
24     print(A.origin_val, A.name, A.age)
25     A.func()
26     print(A.__dict__)
27     print(B.__dict__)

output: 

  只有永不遏制的奋斗 g 26
  测试
  {'__module__': '__main__', '__doc__': None, 'origin_val': '只有永不遏制的奋斗', 'name': 'g', 'age': 26, 'func': <function Meta.__init_subclass__.<locals>.overwrite at 0x0000026737322310>}
  {'__module__': '__main__', '__doc__': None, 'origin_val': '只有永不遏制的奋斗', 'func': <function Meta.__init_subclass__.<locals>.overwrite at 0x0000026737322280>}

 另外补充一句:今年的新书《python工匠...》目前浅看了三章,一个词,相见恨晚,感兴趣我觉得是可以学习学习的

标签:__,26,函数,钩子,print,cls,overwrite,name
From: https://www.cnblogs.com/shixiaogu/p/16891743.html

相关文章

  • 箭头函数
    注意:发送网络请求时,回调函数必须要使用箭头函数。<script> functionf1(name,age){console.log(name,age);}f1("失败",99);//箭头函数let......
  • JavaScript自定义数据类型判断函数
    functionjudgeType(ele){letres=typeofele;if(res==="object"){//短路表达式,第一个成立则返回第二个的值,第一个不成立,则返回第一个的值......
  • Oracle中的substr()函数,截取字符串
    实例、selectsubstr('HelloWorld',0,3)valuefromdual;//返回结果:Hel,截取从“H”开始3个字符、selectsubstr('HelloWorld',1,3)valuefromdual;//返回结果:Hel,截取......
  • all和any函数
    “全称”和“存在”的定义全称:所有的逻辑表达式都为True,才为True;只要有一个为False,即为False。存在:任意一个逻辑表达式为True,就为True;所有都是False,才为False。......
  • Mysql (数学相关函数机日期函数)
    一、数学相关函数(一)abs绝对值(二)ceiling(number2)向上取整,得到比num2大的最小整数(三)BIN(decimal_number)十进制转二进制(四)conv(number2,from_base,to_base)进制......
  • c++ 函数指针
    函数指针是指向函数的指针。指针的类型由它的返回类型和形参类型共同决定。例如bool(*Pf)(conststring&,conststring&);pf指向一个函数,函数的参数是两个string......
  • Python函数
    1.函数的定义1.函数代码用关键字def声明,后接函数标志性名称(参数)2.函数参数放置()中,可以有零个或多个3.return表达式结束函数4.匿名函数:lambda......
  • Yii全局函数使用
    由于YII致力于完美的整合第三方库,它并没有定义任何全局函数。yii中的每一个应用都需要全类别和对象范围。例如,Yii::app()->user;Yii::app()->params['name'];等等。我们可以......
  • php filter函数库 (与变量和类型有关的扩展),可以过滤常用邮件,IP,变量数组等...
     filter扩展库简介 Thisextensionfiltersdatabyeithervalidatingorsanitizingit.Thisisespeciallyusefulwhenthedatasourcecontainsunknown(orfore......
  • 利用函数求一千到两千的闰年
    #include<stdio.h>intis_leap_year(inty){ if(y%4==0&&y%100!=0) return1; else return0; }intmain(){ intyear=0; for(year=1000;year<=2000;year++) { if(1==is_......