Python有与reinterpret_cast类同的机制吗,,嗯这里“类似


嗯这里“类似”不是指和 C++ 的 reinterpret_cast 一模一样,是这个意思:

假设我有以下两个类:

class Point1(object):    def __init__(self, x, y):        (self._x, self._y) = (x, y)    def __str__(self):        return "(%d, %d)" % (x, y)class Point2(object):    def __init__(self, y, x):        (self._x, self._y) = (x, y)    def __str__(self):        return "(%d, %d)" % (y, x)

那么是否有一个函数或运算符 reinterpret_cast,使得若:

p = Point1(233, 2333)pid = id(p)pp = reinterpret_cast(p, Point2)ppid = id(pp)pps = str(pp)t = type(pp)

那么 pid 和 ppid 相同,且 pps 是 '(2333, 233)' 以及 t 是 <class '__main__.Point2'>

# -*- coding:utf-8 -*-class Point1(object):    def __init__(self, x, y):        (self._x, self._y) = (x, y)    def __str__(self):        return "(%d, %d)" % (self._x, self._y)class Point2(object):    def __init__(self, y, x):        (self._x, self._y) = (x, y)    def __str__(self):        return "(%d, %d)" % (self._y, self._x)def reinterpret_cast_like(instance,cls):    newinstance=instance    newinstance.__class__=cls    return newinstancep1=Point1(1,2)p2=reinterpret_cast_like(p1,Point2)print id(p1),id(p2),p2,type(p2)

执行结果

39093968 39093968 (2, 1) <class '__main__.Point2'>Process finished with exit code 0

编橙之家文章,

评论关闭