asp动态链接生成网站地图,正能量不良网站进入窗口免费阅读,菏泽市建设局网站电话,湛江赤坎孵化器网站建设招聘龟叔发明了Python#xff0c;然后集成了一堆概念在这门语言里面#xff0c;比如#xff1a;迭代器#xff0c;装饰器#xff0c;函数#xff0c;生成器#xff0c;类#xff0c;对象#xff0c;协程等等。 这些概念对初学者似乎没一个好懂的#xff0c;不过还有比这更…龟叔发明了Python然后集成了一堆概念在这门语言里面比如迭代器装饰器函数生成器类对象协程等等。 这些概念对初学者似乎没一个好懂的不过还有比这更难的概念它是Python世界中的造物主虽然我们很少去直接使用它但天天都在用它就是今天的主角--元类。 要搞懂元类我们还是先从对象说起。
对象Object
Python中一切皆对象这句话你一定有听说过现在你就听说了一个数字是对象一个字符串是对象一个列表是对象一个字典是对象例如
i10
sabc
nums[1,2,3]
dicts{name:zeng}
等号右边是对象左边是给这些对象取的名字任何对象都有3个关键属性标识、值、类型。标识 标识就和人的身份证ID一样每个对象有唯一ID标识在整个生命周期中都不会变你可以认为标识是这个对象在计算机内存中的地址。通过函数 id()可以查看对象的ID标识。
print(对象的唯一标识为str(id(i)))
对象的唯一标识为1704834400print(对象的唯一标识为str(id(dicts)))
对象的唯一标识为1918903679592
对象值 对象的第二个属性是值值很好理解比如 i 的值是 10s 的值是 abcnums 的值就是 1,2,3。类型 对象还有一个很重要的属性就是类型任何对象都有属于自己的类型对象就是由它的类型构造出来的。 比如上面i的类型是int类型s的类型是字符串类型nums的类型是列表类型dicts的类型是字典类型它们都是由对应的类型构建出来的。 通过type()可以查看对象的类型。 print(对象的类型为str(type(i))) print(对象的类型为str(type(dicts)))
对象的类型为class int
对象的类型为class dict
对象的类型也和ID标识一样不会改变。唯一可能变的就是值。
类
除了系统已经定义好了的整数类型字符串类型列表等类型之外我们还可以创建自己的类型用关键字class来定义。例如 class Person(object):#__init__()有点像构造函数实例化类时调用def __init__(self,name,gender):#name是实例的属性self.name nameself.gender gender#live是类的属性live True
这里的 Person 就是自定义类类是一个抽象的模版既不是指张三也不是李四等具体的人现在我们可以通过调用这个类来构造实例化出一个具体的实在的有名字的对象出来这个对象称之为实例对象Instance。
类与实例对象 p1 Person (zhangan,男)
print(p1.name)
p2 Person (lisi,女)
print(p2.name)
zhangan
lisi这里的 p1、p2 就是实例化之后的实例instance对象这两个对象的类型都是 Person 类类与实例对象的关系就像一个车辆模具与一辆被造出来的真实车的关系一样。如下所示 print(p1)
print(id(p1))
print(type(p1))
__main__.Person object at 0x000002031271BBE0
2212217600992
class __main__.Person类也是对象又叫类对象
刚刚我们说了一切都是对象实例真实的车是对象类模具车当然也是对象因为它也是实实在在存在的东西。
当 Python 解释器执行到关键字 class 这个指令的时候在内部就会创建一个名为 “Person” 的类这个类也是个对象我们称之为类对象注意区别实例对象它一样有ID标识、有类型、有值。例如 print(Person)
print(id(Person))
print(type(Person))
class __main__.Person
2446546123192
class type我们注意到Person这个类对象的类型叫“type”也就是说Person类是由type创建出来的现在你要记住p1p2 是实例对象而Person是类对象实例对象p1的类型是类对象PersonPerson的类型是type。另外这个type是什么鬼
我们来回顾一下 i10
print(对象的类型为str(type(i)))
print(对象的类型为str(type(int)))
对象的类型为class int
对象的类型为class typei的类型是intint的类型也是type所有类的类型都是type也就是说所有的类都是由type创建的。这个type就是元类metaclass元类是用于创建类的类道生一一生二三生万物元类就是Python中的造物主。元类自己也是对象 现在我们都知道类对象可以使用class关键字创建我们还知道类对象的类型是type既然知道了它的类型是type那么肯定可以通过type元类来创建。
用元类创建类
前面讲到过type有一个作用是用于检查对象的类型其实它还有另外一个作用就是作为元类动态地创建类对象。 Person1 type(Person1, (), {live:True})
print(Person1)
Person就是一个类它等价于 class Person1:live True
print(Person1)
class __main__.Person1用元类type创建类的语法是
type(类名,父类元组(可以为空), 属性字典)
小结 Python中一切皆为对象类是对象元类也是对象元类是用于创建类的类。 本文章参考公众号【python之禅】非常感谢链接https://mp.weixin.qq.com/s/UTFQgu4q5pHFyQZBWA9qpA