目录
常规类型判断
# 【字符串】类型判断
isinstance("s", str)
# 【浮点数】类型判断
isinstance(3.14, float)
# 【整数型】类型判断
isinstance(66, int)
# 【布尔】类型判断
isinstance(True, bool)
# 【列表】类型判断
isinstance(["a", 1, True], list)
# 【元组】类型判断
isinstance(("b", 1), tuple)
# 【字典】类型判断
isinstance({"a": 1, "b": 2}, dict)
# 【集合】类型判断
isinstance({"a", "b"}, set)
Function&Method类型判断
import types
def func():
pass
class A(object):
@classmethod
def class_method(cls):
pass
def method(self):
pass
print(isinstance(func, types.FunctionType)) # 函数判断
print(isinstance(A.class_method, types.MethodType)) # 方法判断
print(isinstance(A().method, types.MethodType)) # 方法判断
print(isinstance(A.class_method, types.FunctionType)) # 函数的判断类型不能用于方法的判断
print(isinstance(A().method, types.FunctionType)) # 函数的判断类型不能用于方法的判断
class类型判断
python3中判断对象是否是class
class A:
pass
class B(object):
pass
print(type(A))
print(type(B))
print(isinstance(A, type))
print(isinstance(B, type))
python2中判断对象是否是class
在Python2中,如果定义的class未继承 object (比如A),那么它的类型是classobj
在python2中未继承object类的class需要使用 types.ClassType 来判定
# coding=utf-8
import types
class A:
pass
class B(object):
pass
print(type(A))
print(type(B))
print("不继承object的类A,使用type判断: %s" % isinstance(A, type))
print("继承object的类B,使用type判断:%s"% isinstance(B, type))
print("不继承object的类A,使用types.ClassType判断:%s" % isinstance(A, types.ClassType))
print("继承object的类B,使用types.ClassType判断:%s" % isinstance(B, types.ClassType))
综上,python2中,class判断应包含两个类型。
# coding=utf-8
import types
class A:
pass
class B(object):
pass
print("不继承object的类A,使用types.ClassType判断:%s" % isinstance(A, (type, types.ClassType)))
print("继承object的类B,使用types.ClassType判断:%s" % isinstance(B, (type, types.ClassType)))
判断对象是否是一个已知类或子类的实例化对象。
class A(object):
pass
class B(A):
pass
class C(object):
pass
a = A()
b = B()
c = C()
print(isinstance(a, A))
print(isinstance(b, A))
print(isinstance(C, A))
判断对象是否是一个已知类或是该已知类的子类
此类判断需用 issubclass
方法。
class A(object):
pass
class B(A):
pass
class C(B):
pass
class D(object):
pass
print(issubclass(B, A))
print(issubclass(C, A))
print(issubclass(D, A))
module类型判断
Python的module指的是Python包中以.py结尾的名称,包含了 Python 对象定义和Python语句。
module类型判断指的是import 的最后个节点导入的是modulle
import types
from settings import base_conf # 导入最后给节点为module
ret = isinstance(base_conf, types.ModuleType)
print(ret)
扩展:区分module是package还是py文件
注意:如果导入的最后个节点如果是package名称,但是类型判断结果仍是module类型。这是因为导入package时,实际实际导入的是该package下的__init__.py
import types
from settings import base_conf
ret = isinstance(base_conf, types.ModuleType)
print("导入py文件名称的module类型判断:", ret)
print(base_conf.__file__)
import settings
ret = isinstance(settings, types.ModuleType)
print("导入package的module类型判断:", ret)
print(settings.__file__)
通过dir()方法查看两种对象属性差异
import settings
from settings import base_conf
print("settings:", dir(settings))
print("base_conf:", dir(base_conf))
package比py文件module多个__path__属性,可以使用该区分module的不同类型
import types
import settings
from settings import base_conf
for mod in [settings, base_conf]:
if isinstance(mod, types.ModuleType):
if hasattr(mod, '__path__'):
print("模块 %s 是package!" % mod.__name__)
else:
print("模块 %s 是py文件" % mod.__name__)
-事必有法,然后有成- 最后祝大家早日达到测试的天花板!
以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了