Python_对象类型判断

部署运行你感兴趣的模型镜像

目录

常规类型判断

Function&Method类型判断

class类型判断

python3中判断对象是否是class

python2中判断对象是否是class

判断对象是否是一个已知类或子类的实例化对象。

判断对象是否是一个已知类或是该已知类的子类

module类型判断

扩展:区分module是package还是py文件


常规类型判断

# 【字符串】类型判断
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】直接拿走就好了

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python 中,`None` 类似于其他编程语言中的 `null` 或者 `NULL`。然而,在 Python 的语义中,`None` 并不是一个数值或者地址的概念,而是一个特殊的常量,用来表示“无值”。以下是关于 Python 判断对象类型的关键词以及与 `None` 相关的内容: ### 关键词用于判断对象类型 Python 提供了一个内置的关键字 `is` 来测试两个对象是否相同(即它们是否是同一个对象)。这不同于使用 `==` 运算符来进行值的比较。 对于 `NoneType` 对象,通常会通过如下方式来检测某个变量是否为 `None`: ```python value = None if value is None: print("Value is None") # 此处会被执行 else: print("Value is not None") ``` 上述代码片段展示了如何利用 `is` 关键字验证一个变量是否等于 `None`[^4]。 另外,如果要检查某物的具体数据类型,则可借助函数 `type()` 或者 `isinstance()` 实现更精确的匹配操作。例如: ```python variable = [] print(type(variable) == list) # True 使用 type() 函数直接对比类型 print(isinstance(variable, (list))) # True 使用 isinstance() 方法支持继承关系下的类型判定 ``` 值得注意的是,尽管 JavaScript 中存在严格区分 `undefined` 和 `null` 的情况[^1],但在 Python 当中并不存在类似的分离概念;所有的未赋初值情形均统一由单例模式实现的特殊标记——`None` 承担角色功能[^5]。 ### NULL本质解析差异性说明 从 C/C++ 编程视角来看待 NULL 定义时提到其本质上是指向零地址的一个指针[(void *)0][^3]。而在 Python 设计哲学下完全摒弃了这种底层硬件层面抽象表现形式,转而采用更加简洁直观的方式处理空缺状态—引入独立关键字 'None' 表达这一含义。 #### 示例代码展示 下面给出一段简单例子进一步阐明这些理论知识点的实际应用效果。 ```python def get_value(): return None result = get_value() if result is None: print('No data available.') elif isinstance(result,str): process_string_data(result) else: handle_other_types(result) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值