Python之面向对象元类

  call方法:

 class People:
def __init__(self,name):
self.name=name
#
def __call__(self, *args, **kwargs):
print('call')
# p=People('George')
print(callable(People))
print(callable(p)) p()

  元类:  

 class People:
def __init__(self,name):
self.name=name p=People('egon') # print(type(p))
#
# print(type(People)) #typer--->类------>对象 class Foo:
x=1
def run(self):
pass
print(type(Foo)) #type成为元类,是所有类的类,利用type模拟class关键字的创建类的过程
def run(self):
print('%s is runing' %self.name) class_name='Bar'
bases=(object,)
class_dic={
'x':1,
'run':run
} Bar=type(class_name,bases,class_dic)
print(Bar)
print(type(Bar))

  自定义元类:

 # class Foo(metaclass=type):
# x=1
# def run(self):
# print('running')
#
#
# # type('Foo',(object,),{'x':1,'run':run}) # class Mymeta(type):
# def __init__(self,class_name,class_bases,class_dic):
# # print(self)
# # print(class_name)
# # print(class_bases)
# # print(class_dic)
# for key in class_dic:
# if not callable(class_dic[key]):continue
# if not class_dic[key].__doc__:
# raise TypeError('小子,你没写注释,赶紧去写')
#
# # type.__init__(self,class_name,class_bases,class_dic)
# class Foo(metaclass=Mymeta):
# x=1
# def run(self):
# 'run function'
# print('running') # Foo=Mymeta('Foo',(object,),{'x':1,'run':run}) # print(Foo.__dict__) class Mymeta(type):
def __init__(self,class_name,class_bases,class_dic):
pass
def __call__(self, *args, **kwargs):
# print(self)
obj=self.__new__(self)
self.__init__(obj,*args,**kwargs) #obj.name='egon'
return obj
class Foo(metaclass=Mymeta):
x=1
def __init__(self,name):
self.name=name #obj.name='egon'
def run(self):
'run function'
print('running')
# print(Foo.__dict__) f=Foo('egon') print(f) print(f.name)

友情学习链接

Python之面向对象元类的更多相关文章

  1. python中面向对象元类的自定义用法

    面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...

  2. python基础——使用元类

    python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...

  3. Python基础:元类

    一.概述 二.经典阐述 三.核心总结 1.类的创建过程 2.元类的使用惯例 四.简单案例 1.默认行为 2.使用元类 五.实践为王 一.概述 Python虽然是多范式的编程语言,但它的数据模型却是 纯 ...

  4. [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式

    使用元类 深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例 ...

  5. python的面向对象和类

    目录 一.基本知识点 1.面向过程编程 2.面向对象编程 3.注意 二.类的结构 1.类的理解 2.代码形式 3.类和函数的一些区别 4.类中的数据 5.类中的方法(基础) 三.类的实例化 四.类的继 ...

  6. 什么是python中的元类

    所属网站分类: python高级 > 面向对象 作者:goodbody 原文链接: http://www.pythonheidong.com/blog/article/11/ 来源:python ...

  7. Python中的元类(metaclass)

    推荐+收藏:深刻理解Python中的元类(metaclass) 做一些笔记学习学习: 在大多数编程语言中,类就是用来描述如何生成一个对象的代码段,在Python中类也是一个对象,这个(类)对象自身拥有 ...

  8. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  9. Python之面向对象新式类和经典类

    Python之面向对象新式类和经典类 新式类和经典类的继承原理: 在Python3中,就只有新式类一种了. 先看Python3中新式类: 类是有继承顺序的: Python的类是可以继承多个类的,也就是 ...

随机推荐

  1. [App Store Connect帮助]七、在 App Store 上发行(3.3)提交至“App 审核”:解决 App 拒绝问题

    如果“App 审核”或“Beta 版 App 审核”拒绝了您的 App,您可以与 Apple 沟通并在解决方案中心中解决问题. 来自 Apple 的通讯信息包含有关 App 拒绝的信息,其中包括该 A ...

  2. 安装privoxy后curl 操作

    如果讲privoxy服务关掉 sudo /etc/init.d/privoxy restart 这时候发现 curl www.baidu.com 也没法正常工作,直接显示的是无法连接到相应端口还是 主 ...

  3. bootstrap 弹出框 另类运用

    下面是我在做一个简单登录页面时,应用boostrap弹出框,通过调节做成警示框的过程,前后经过了一番波折.因为摸索过程十分有趣,最后也是成功的,使用弹出框做除了警示框的效果,下面我们来看一下吧. 首先 ...

  4. 在代码里更新autolayout布局

    //遍历view约束(高,宽) NSArray* constrains = self.View.constraints; for (NSLayoutConstraint* constraint in ...

  5. JavaScript编程艺术-第7章代码汇总(1)

    1.document.write()(HTML与JS未分离) HTML: JS: 2..innerHTML(直接覆盖) HTML: JS: 3.getAttribute.setAttribute.ge ...

  6. [Usaco2011 Feb]Generic Cow Protests

    Description Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. ...

  7. 51nod 1138 连续整数的和

    1138 连续整数的和  基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2). ...

  8. Matlab调用C程序 分类: Matlab c/c++ 2015-01-06 19:18 464人阅读 评论(0) 收藏

    Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C ...

  9. 在 c#中 如何 重新激活一个控件

    比如toolBar是一个组合控件 this.toolBar.CaptionHeight =this.toolBar.Items.Count * 60;//重新激活toolBar控件 CaptionHe ...

  10. fix for 12c profile

    .for CDBS run as sysDBa CREATE OR REPLACE FUNCTION verify_function (username varchar2, password varc ...