元类metaclass

使劲搞,但是没搞清楚__new__的作用

了解Python元类

Python进阶:一步步理解Python中的元类metaclass

Python中的__new__和__init__的区别

使用元类

__new__的作用: 元类

  1. class Author(type):
  2. # 类对象 类名 父类 类属性和方法
  3. def __new__(mcs, name, bases, dict):
  4. # 添加作者属性
  5. dict["author"] = "mm"
  6. return super(Author, mcs).__new__(mcs, name, bases, dict)
  7. class Foo(object, metaclass=Author):
  8. pass
  9. foo = Foo()
  10. print(foo.author)

创建类

  1. def fn(self):
  2. print("maotai")
  3. # 类名 父类 属性
  4. Hello = type("Hello", (object,), dict(hello=lambda x: x + 1))
  5. h = Hello()
  6. h.hello(12)
  7. ## type
  8. # 1,同__class__, 实例属于哪一类 类属于哪一类
  9. # 2,创建一个类

匿名函数

  1. g = lambda x: x + 1
  2. print(g(1))

self是什么

  1. class A:
  2. # self是什么
  3. def __init__(self):
  4. print(self)
  5. a = A()
  6. print("--->",a)

cls的含义

  1. class A:
  2. ## cls的含义
  3. @classmethod
  4. def show(cls,name):
  5. print("A",name)
  6. a = A()
  7. a.show("maota")

子类调用父类方法super

  1. class A:
  2. def show(self):
  3. print("hello A")
  4. class B(A):
  5. def show2(self):
  6. super().show() # 调用父类方法
  7. b = B()
  8. b.show2()

类的属性和方法

  1. class A:
  2. age = 22
  3. def __init__(self):
  4. self.name = 'maotai'
  5. def show(self):
  6. pass
  7. ## dir(A) 有age, show 类的属性和方法
  8. ## dir(A()) 有name和age,show 实例的属性和方法
  9. for i in dir(A()):
  10. print(i)
  11. print(A.__dict__) # age show 类属性和方法
  12. # __doc__
  13. # __init__
  14. # __dict_
  15. # __dir__
  16. # __class__
  17. # __delattr__
  18. # __new__
  19. # __repr__
  20. # __setattr__

@property和__call__ 与 callable()

定制类


  1. class Person:
  2. # 对象当作属性来调用
  3. @property
  4. def show(self):
  5. print("mao tai")
  6. # 打印实例()时候的显示
  7. def __call__(self, *args, **kwargs):
  8. print("hello maotai")
  9. p = Person()
  10. # p() # hello maotai
  11. # TypeError: 'Person' object is not callable
  12. p.show # mao tai
  13. print(callable(p)) # True

[py]python中__new__作用的更多相关文章

  1. Python中__new__的作用

    __new__ 的作用 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径.还 ...

  2. Python中__new__方法为什么有人说是构造方法?有什么作用?

    __new__方法是Python新式类引入的,通常用于控制生成一个新实例的过程.它是类级别的静态方法,是在创建实例对象前执行,如果自定义类中没有重写该方法,则Python自动调用父类的方法,当所有父类 ...

  3. Python中__new__()方法的使用和实例化

    new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决 ...

  4. Python 中星号作用:解包&打散

    python中’*’和’**’的使用分两个方面,一个是计算,另一个是参数传递过程中元素的打包和解包.  计算方面 ‘*’和’**’在python中最常见的作用分别是‘相乘’和‘乘幂’,如下: > ...

  5. decorator在Python中的作用

    decorator(装饰器)在python中作用,可以起到代码复用,也可以起到AOP(面向横切面)的作用. 另外很重要的一点应该就是function在python的世界中是作为一等公民存在的. 在py ...

  6. Python中__new__与__init__介绍

    在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...

  7. [py]python中的特殊类class type和类的两面性图解

    生活中的模具 生活中 编程 万物都从无到有, 起于烟尘 () 生产原料,铁 object 车床-生产各类模具 元类即metaclass,对应python的class type 模具-生产各类实在的物品 ...

  8. python中 __new__和__init__

    python这两个函数和类的实例化有关. __init__是实例化完成之后调用的,会对生成的对象实例做一些修饰 __new__是python新类型才有的,它更像是c/c++里面的构造函数,因为这个函数 ...

  9. Python 中__new__()和__init__()的区别

    转自: https://blog.csdn.net/weixin_37579123/article/details/89515577 __new__方法:类级别的方法 特性: 1.是在类准备将自身实例 ...

随机推荐

  1. 查看当前mysql数据库实例中,支持的字符集有哪些,或者是否支持某个特定字符集

    需求描述: 查看当前mysql实例中支持哪些字符集,过滤特定的字符集 操作过程: 1.通过show character set来进行查看 mysql> show character set; + ...

  2. python计算时间差的方法

    本文实例讲述了python计算时间差的方法.分享给大家供大家参考.具体分析如下: 1.问题: 给定你两个日期,如何计算这两个日期之间间隔几天,几个星期,几个月,几年? 2.解决方法: 标准模块date ...

  3. 【RF库测试】Variable Should not Exist & variable should exist

    Variable Should not Exist variable should exist

  4. 棒谷科技java岗笔试题与初试题

    选择题 1.银行家算法的作用 2.docker镜像结构 3.docker的默认网络模式 4.spring的动态代理效率比较 5.springboot默认的json 6.springboot多profi ...

  5. Oracle 11G Client 客户端安装步骤(图文详解)

    http://www.cnblogs.com/jiguixin/archive/2011/09/09/2172672.html 下载地址: http://download.oracle.com/otn ...

  6. MQTT-SN协议乱翻之小结篇

    前言 这里简单做一些小结和对比,针对前面的协议翻译部分,一阶段的学习完结. MQTT-SN VS MQTT MQTT-SN基于MQTT原有语义,但做了很多的调整.比如: 一个CONNECT消息被拆分为 ...

  7. fastcgi_param解释

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param QUERY_STRI ...

  8. Microsoft Web Application Stress Tool 使用

    为了测试数据的准备性,首先需要删除缓存和Cookies等临时文件.启动IE后打开“工具”菜单下的“Internet”选项命令,在打开的“Internet选项”窗口的“常规”选项卡中,单击“Intern ...

  9. 【BZOJ4429】[Nwerc2015] Elementary Math小学数学 最大流

    [BZOJ4429][Nwerc2015] Elementary Math小学数学 Description Ellen给她的学生教小学数学.期末考试已经来临了.考试有n个题目,每一个题目学生们都要对一 ...

  10. linux 统计文件数量

    查找当前目录下compose文件的数量 ls -lr | grep "compose" | wc -l