代码块:
a = 1
print(type(a))
print(type(int))
控制台输出:
<class 'int'>
<class 'type'>
也就是说在python中int类是由type类生成的,而数字1是由int类生成的。
代码块:
b = "abc"
print(type(b))
print(type(str))
控制台输出:
<class 'str'>
<class 'type'>
同理str类也是type类生成的 ,字符串"abc"是由str生成的。
class Student:
pass
stu = Student()
print(type(stu))
print(type(Student))
输出为:
<class '__main__.Student'>
<class 'type'>
说明自定义Student类也是由type类生成的。
obj类是所有类都继承的最顶层的类(基类)
注意:type也是一个类,同时type也是一个对象
print(type.__base__)
print(type(object))
输出:
<class 'object'>
<class 'type'>
也就是说type和object互为对方的指针,type类是object的实例化,object是type的继承。
python解释器启动时会自动生成一个None对象(全局唯一一个)
a = None
b = None
print(id(a),id(b))
140717902960768 140717902960768
可以发现a和b二者的id是一样的,说明它们指向的是同一个地址,侧面证明了None类型是全局只有一个的类型。
对象会将 不可变的值 映射到任意对象。 映射属于可变对象。 目前仅有一种标准映射类型 字典
上下文管理器就是实现了上下文管理协议的对象。主要用于保存和恢复各种全局状态,关闭文件等,上下文管理器本身就是一种装饰器。
模块类型、class和实例、函数类型、方法类型、代码类型、object对象、type类型、type类型…
python里定义的以双下划线开头和结尾的函数叫做魔法函数
class Company(object):
def __init__(self,employee_list):
self.employee = employee_list
def __getitem__(self, item):
return self.employee[item]
company = Company(['tom','bob','xiaoming'])
for i in company:
print(i)
tom
bob
xiaoming
当for循环遍历company对象的时候,会自动去寻找构成这个对象的类中的__getitem__魔法函数
数据模型其实就是魔法函数。因为我们定义了一些声明了它的定义的数据模型就会用神奇的功能。比如上文中__getitem__魔法函数 定义之后的类变成了一个可迭代对象。