Python中的类型转换
我在Python中遇到了类型转换的问题。
我在文件module_A.py中有一个方法:
import Common.Models.Pax as Pax
def verify_passangers_data(self,paxes):
for i in range(len(paxes)):
pax=paxes[i]
这是我的Pax.py:
class Pax:
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
#----------------------------------------------------------------------
class Adult(Pax):
def __init__(self,last_day_of_travel,first_name,last_name,nationality,address=None):
self.birth_day=datetime.today() - timedelta(days = random.randrange(6563, 20793-(date.today()-last_day_of_travel).days))
self.first_name=first_name
self.last_name=last_name
self.nationality=nationality
self.address=address
这是我在另一个模块(module_C.py)中创建集合的方式:
paxes=[]
paxes.append(Pax.Adult(last_day_of_travel,'FirstName','LastName',Nationality.Poland,DataRepository.addresses['Default']))
但是,看看我在调试工具(在wing ide中)得到的输出:
>>> type(pax)
<class 'Common.Models.Pax.Adult'>
>>> pax is Common.Models.Pax.Adult
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
builtins.NameError: name 'Common' is not defined
我该如何检查pax是否是Adult的实例呢?
4 个回答
0
你需要先导入这个类型,才能引用它:
>>> x is socket._fileobject
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'socket' is not defined
>>> import socket
>>> x is socket._fileobject
False
假设你是通过其他方法获得了
另外,is
是用来测试对象的身份(也就是这两个对象是不是同一个),而不是用来测试类型的。你应该使用instanceof(pax,Common...)
。
0
你有两个错误,首先是用错了,应该用 isinstance
函数,而不是 is
。第二个错误是你试图用模块的完整名字来引用它,但你已经用别名导入了这个模块。
所以你应该这样做:
isinstance(pax,Pax.Adult)
3
我怎么检查 pax 是否是 Adult 的实例?
可以使用 isinstance
函数:
isinstance(pax, Common.Models.Pax.Adult)
不过,你得确保已经导入了这个类,比如说 import Common.Models.Pax
。
(虽然有些人认为,检查 Python 对象的类型其实很少有必要。因为 Python 是动态类型的,通常你应该检查一个对象是否能响应某个方法调用,而不是单纯检查它的类型。不过,有时候你可能确实有理由需要检查类型。)