元类metaclass

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

了解Python元类

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

Python中的__new__和__init__的区别

使用元类

__new__的作用: 元类

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

创建类

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

匿名函数

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

self是什么

class A:
# self是什么
def __init__(self):
print(self) a = A()
print("--->",a)

cls的含义

class A:
## cls的含义
@classmethod
def show(cls,name):
print("A",name) a = A()
a.show("maota")

子类调用父类方法super

class A:
def show(self):
print("hello A") class B(A):
def show2(self):
super().show() # 调用父类方法 b = B()
b.show2()

类的属性和方法

class A:
age = 22 def __init__(self):
self.name = 'maotai'
def show(self):
pass ## dir(A) 有age, show 类的属性和方法
## dir(A()) 有name和age,show 实例的属性和方法 for i in dir(A()):
print(i) print(A.__dict__) # age show 类属性和方法
# __doc__
# __init__
# __dict_
# __dir__ # __class__
# __delattr__
# __new__
# __repr__
# __setattr__

@property和__call__ 与 callable()

定制类


class Person:
# 对象当作属性来调用
@property
def show(self):
print("mao tai")
# 打印实例()时候的显示
def __call__(self, *args, **kwargs):
print("hello maotai") p = Person()
# p() # hello maotai
# TypeError: 'Person' object is not callable
p.show # mao tai 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. Docker 集群管理

    docker systemd unit file [Unit] Description=Docker Application Container Engine Documentation=http:/ ...

  2. Neo4j简单的样例

    系统环境: Ubuntu 04.10 x64 一:安装 下载最新版:neo4j-community-2.2.3-unix.tar.gz  解压 cd neo4j-community-2.2.3/bin ...

  3. git 清空所有commit记录方法

    说明:例如将代码提交到git仓库,将一些敏感信息提交,所以需要删除提交记录以彻底清除提交信息,以得到一个干净的仓库且代码不变 1.Checkout git checkout --orphan late ...

  4. 测试用例和BUG描述规范

    欢迎关注我的公众号,了解更多的测试知识:[软件测试经验与教训] 一一BUG描述基础知识 Bug标题中需包含Bug的具体位置并以[]标注 举例:[模块-子模块-页面]XXXXXXXXXXXX Bug标题 ...

  5. VS-Qt-OSG-CMake基本项目框架

    在VS-Qt-CMake基础上,打开mainwindow.ui,添加一个QWidget,然后在widget上右键-提升,选择SceneViewWidget CMakeLists.txt中添加了OSG相 ...

  6. 计算时间:一个C++运算符重载示例

    Time类是一个用于计算时间的类,其原型如下:程序清单11.1 mytime0.h // mytime0.h -- Time class before operator overloading #if ...

  7. Spring启动过程分析】(1)启动流程简介

    1. spring简介 spring的最基本的功能就是创建对象及管理这些对象之间的依赖关系,实现低耦合.高内聚.还提供像通用日志记录.性能统计.安全控制.异常处理等面向切面的能力,还能帮我们管理最头疼 ...

  8. java基础---->java中国际化的实现

    应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产.开发这样的程序的过程,就称为国际化.今天,我们就开始学习java中国际化的代码实现. Java国际化主要通过如下3个类 ...

  9. Cloud Foundry技术全貌及核心组件分析

    原文链接:http://www.programmer.com.cn/14472/ 历经一年多的发展,Cloud Foundry的架构设计和实现有了众多改进和优化.为了便于大家了解和深入研究首个开源Pa ...

  10. fedora/centos7防火墙FirewallD详解

    1 使用 FirewallD 构建动态防火墙 1.1 “守护进程” 1.2 静态防火墙(system-config-firewall/lokkit) 1.3 使用 iptables 和 ip6tabl ...