当前位置: 首页 > wzjs >正文

凡科登陆网站手机版wdcp搭建网站

凡科登陆网站手机版,wdcp搭建网站,辽宁省建造师执业信息网,开网店的流程和费用__init_subclass__ https://docs.python.org/3/reference/datamodel.html#object.__init_subclass__ Python 3.6 新增。 父类派生子类后会调用该方法,方法中 cls 指向派生出的子类。 若__init_subclass__被定义为普通方法,将会被隐式转换为类方法&…

__init_subclass__

https://docs.python.org/3/reference/datamodel.html#object.__init_subclass__
Python 3.6 新增。

父类派生子类后会调用该方法,方法中 cls 指向派生出的子类。

  • __init_subclass__被定义为普通方法,将会被隐式转换为类方法,故不必使用@classmethod装饰器
  • metaclass 不会被传给__init_subclass__
  • 传给一个新类的关键字参数会被传给父类的__init_subclass__。为保证与父类__init_subclass__兼容,应当将关键字参数中仅子类__init_subclass__需要的参数去掉后再传入父类__init_subclass__
class Base:def __init_subclass__(cls, /, name, **kwargs):super().__init_subclass__(**kwargs)print("Base __init_subclass__ called")cls.x = {}cls.name = nameclass A(Base, name="Jack"):def __init__(self):super().__init__()print("A __init__ called")def __new__(cls, *args, **kwargs):super().__new__(cls)print("A __new__ called")print(A.x)
print(A.name)
# Base __init_subclass__ called
# {}
# Jack
class A:def __init__(self):super().__init__()print("A __init__ called")def __new__(cls, *args, **kwargs):super().__new__(cls)print("A __new__ called")@classmethoddef __init_subclass__(cls, **kwargs):super().__init_subclass__()print(kwargs)print("A __init_subclass__ called")class B(A, bbb=12):def __init__(self):super().__init__()print("B __init__ called")def __new__(cls, *args, **kwargs):super().__new__(cls)print("B __new__ called")def __init_subclass__(cls, **kwargs):super().__init_subclass__()print("B __init_subclass__ called")class C(B, ccc=12):def __init__(self):super().__init__()print("C __init__ called")def __new__(cls, *args, **kwargs):super().__new__(cls)print("C __new__ called")def __init_subclass__(cls, **kwargs):super().__init_subclass__()print("C __init_subclass__ called")

__class_getitem__

__class_getitem__方法的目的是允许标准库泛型类的运行时形参化以更方便地对这些类应用 类型提示。

  • __class_getitem__被定义为普通方法,将会被隐式转换为类方法,故不必使用@classmethod装饰器
  • __class_getitem__方法应当返回一个 GenericAlias 类型

https://docs.python.org/3/reference/datamodel.html#object.__class_getitem__

from typing import Listclass A:def __class_getitem__(cls, item):print(item)return "abc"print(A[0])if __name__ == '__main__':int_arr_type = List[int]list1: int_arr_type = [1]list2: int_arr_type = []print(int_arr_type)

__instancecheck____subclasscheck__

  • __instancecheck__可以自定义实例检查逻辑
  • __subclasscheck__可以自定义子类检查逻辑
from typing import Anyclass Meta(type):def __instancecheck__(self, instance: Any) -> bool:print("Instance Check")print(instance)return Truedef __subclasscheck__(self, subclass: type) -> bool:print("Subclass Check")print(subclass)if subclass is int:return Truereturn Falseclass A(metaclass=Meta):passo = A()print(isinstance(123, A))print()print(issubclass(int, A))# Instance Check
# 123
# True
# 
# Subclass Check
# <class 'int'>
# True

__prepare__

https://peps.python.org/pep-3115

Python 3.0 新增。

__prepare__用于为类准备命名空间。

  • __prepare__定义在元类中并且必须被显式定义为类方法
  • __prepare__方法返回一个映射对象
  • Python 执行类定义语句,会首先调用其元类__prepare__方法,获得一个映射对象,该映射对象会被作为该类的命名空间,类的属性和方法会被存储在该映射对象中,随后映射对象会成为该类的__dict__属性。
import collections
from typing import Any, Mapping# 创建一个 OrderedDict 对象作为字典
global_dict = collections.OrderedDict()global_dict["global_dict_name"] = "global_dict"class MyMeta(type):@classmethoddef __prepare__(metacls, __name: str, __bases: tuple[type, ...], **kwargs: Any) -> Mapping[str, object]:print(metacls, __name, __bases, kwargs)return global_dictclass MyClass(metaclass=MyMeta):a = 1b = 2c = 3print(MyClass.__dict__)
print("global_dict_name" in MyClass.__dict__)# <class '__main__.MyMeta'> MyClass () {}
# {'global_dict_name': 'global_dict', '__module__': '__main__', '__firstlineno__': 18, 'a': 1, 'b': 2, 'c': 3, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None}
# True

__mro_entries__

https://docs.python.org/3/reference/datamodel.html#object.__mro_entries__

若某个类的父类不是type的实例(此时父类就是一个普通对象),则定义该类时其基类会被替换为父类中定义的__mro_entries__方法的返回值,若父类中没有定义__mro_entries__方法,此时类的定义会报错AttributeError: 'xxx' object has no attribute 'mro',因为无法进行MRO。

class A1:...class A2:def __mro_entries__(self, bases):return (dict,)class B1(A1):print(type(A1), type(A1) is type)...class B2(A2()):print(type(A2()), type(A2()) is not type)...print(B1.mro())
print(B2.mro())
# <class 'type'> True
# <class '__main__.A2'> True
# [<class '__main__.B1'>, <class '__main__.A1'>, <class 'object'>]
# [<class '__main__.B2'>, <class 'dict'>, <class 'object'>]
http://www.dtcms.com/wzjs/593849.html

相关文章:

  • 如东住房和城乡建设局网站显示网站正在建设中
  • 上线了建站百度推广商桥网站上怎么去掉
  • 苏州网站建设sz sogou手机在线
  • 提供邵阳网站建设做网站公司宁波
  • wordpress 摘录东莞市网络seo推广企业
  • 新闻类网站html模板免费下载网站建设生存期模型
  • 网站优化设计公司现在创业什么行业最好
  • 漳州网站建设网站制作企业网站推广方案上海
  • 海淀网站建设龙岩百度云盘网站开发
  • 社保个人网站入口购物网站开发面试
  • 合肥市网站制作网站设置反爬虫的主要原因
  • SharePoint做网站好吗网站页面设计如何快速定稿
  • 做互助盘网站找哪家好网站推广该怎么做
  • 网站推广途径和方案wordpress手机发布时间
  • 制作网站首页南宁网页设计培训学校
  • 网站开发的一次性收益wordpress 修改固定链接
  • 成都网站建站公司全国性质的网站开发公司
  • 企业站网页制作实训步骤建设互联网站的目的
  • 做网站一般工资如何惠州百度seo哪家好
  • 常州网站建设选思创怎么建设游戏平台网站
  • 经营网站需要什么费用app开发软件价格
  • 手机号码定位网站开发外包做网站的会给你什么
  • 外国网站 游戏设定图推广网页模板
  • 催收网站开发物联网设计大赛官网
  • 北京购物网站建设公司柳州市住房和城乡建设局网站首页
  • 网站设计 视频动画素材库免费下载
  • 公司网站文章天津网站建设班
  • 衡水市建设局网站网站界面设计的流程
  • 百度怎么建立网站佛山做推广网站的
  • 哈尔滨做网站巨耀公司中国十大建筑事务所排名