python type

type 的普通用法

type一般的用法使用来获取一个变量的类型,但是,type并不适合用来获取一个变量的类型。

想获取一个变量的类型,有其实类的实际类型要用isinstance

isinstance

1
2
3
4
5
6
7
8
9
10
class A:
pass

class B(A):
pass

isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
1
2
3
a = 111
isinstance(a, int)
# True

python中有一种old-style class 这些类用type直接取得到的都是instance, 也就是所有的类实例都是一样的。在后来的new-style class中,得到的会有区别但是,依然不能很好的判断子类的问题。

type 创建一个类型

这个用法我看到的时候反正是一脸懵逼,莫非是用来动态创建类用的?

用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#type(classname,(parents,...),{attribute})
#第一个参数classname是类名,第二个是一个父类元组,没有可填空元组,第三个参数是类属性字典。


#!/usr/bin/env python
# coding=utf-8


class XA(object):

a = 1

XB = type('XC', (object, ), dict(a=3))

Xa = XA()

Xb = XB()
# Xc = XC() # syntax error, there is no such a class named XC, only XB as a llegal class name.

print(XA)
print(XB)
print(XB)
print(Xa.a)
print(Xb.a)
#print(Xc.a)

总之这样可以动态的创建一个类。

比较秀一点的用法:

1
MonitorThread = type("MonitorThread", (BaseThread, ), dict(__init__=init_monitor_thread, working=work_monitor))

用散的函数组装的类,还有这种。。。

python早晚要完,写代码一时爽,维护火葬场。

Talk is not cheap.