BBIN真人娱乐Python基础(九) type元类

来源:http://www.mnuet.com 作者:动态资讯 人气:123 发布时间:2019-10-16
摘要:python元类: ** type()    ** 元类是python高阶语法.合理的利用能够减掉大气重复性的代码.   元类实际上做了以下三方面包车型地铁职业:   干预创设类的长河 修改类 归来修改现在的类

python元类:**type()   **

元类是python高阶语法. 合理的利用能够减掉大气重复性的代码.

 

元类实际上做了以下三方面包车型地铁职业:

 

  • 干预创设类的长河
  • 修改类
  • 归来修改现在的类

 

为何使用元类?

 

为何要运用元类这种歪曲且易于出错的功力?
日常情状下,咱们并不会使用元类,99%的开辟者并不会用到元类,所以经常不要思考那几个主题素材。
元类主用用于创制API,二个卓绝的事例正是Django的ORM。
它让我们得以这样定义三个类:

 

class Person(models.Model):
  name = models.CharField(max_length=30)
  age = models.IntegerField()

 

运作上边包车型地铁代码:

guy = Person(name='bob', age='35')
print(guy.age)

回来的结果是int项目并不是IntegerField指标。那是因为models.Model行使了元类,它会将Python中定义的字段转变来数据库中的字段。
经过应用元类,Django将复杂的接口转换到简单的接口。

 

原型:type(类名,基类元组(可以为空,用于继承), 包含属性或函数的字典)

 以下二种写法都足以:

type('Class',(object,),dict(hello=fun()))

type('Class',(object,),{"hello":fun()})

1、class 自定义的类名称

2、(object,)是承继类,的元组,假若独有三个就写这种时局(object,);三个(object,xxxx,)

3、dict(hello=fun()) 或 {"hello":fun()} 第多少个参数,是多个字典等号左是 自定义的秘籍名,右边是已写好的章程名,那一个要留意,有参数且未有暗中同意值的状态下,要加括号;

 

def fun():
    print('hello world!')


if __name__=="__main__":

    h = type('Hello',(object,),dict(hello=fun()))
    tc = h()
    tc.hello

 

引用:

h 也正是接收Hello类;tc = h()实例化类;tc.hello方法,调用的其实是我们定义的fun方法。

    Hello = type('Hello',(object,),dict(hello=fun()))
    tc = Hello()
    tc.hello

 type()动态创造类后,还是能加上越多的措施和属性:

def mysql():
    conn = pymysql.connect(host='127.0.0.1',port=3306 ,user='root' ,passwd='q123456' ,db='amsql' )
    cur = conn.cursor()
    sql = "SELECT * FROM amt_case_interface_table"
    ret = cur.execute(sql)
    print(cur.fetchmany(3))
    #conn.commit()

    cur.close()
    conn.close()

Hello.mysql = mysql()

调用:

tc.mysql

 

Linux and python学习沟通1,2群已满.

Linux and python学习交换3群新开,款待插手,一齐学习.qq 3群:563227894

不前进,不倒退,甘休的景色是没有的.

协助进行前行,与君共勉,

 

本文由广东十一选五一定牛发布于动态资讯,转载请注明出处:BBIN真人娱乐Python基础(九) type元类

关键词:

最火资讯