python对象类型转换

时间:2010-12-25 02:13:33

标签: python

我一直在尝试搜索如何在python中传递对象引用并键入类似于Java的类型但没有用。我duno如果这个话题存在于某处。

我的麻烦是我必须将对象引用传递给类构造函数。但我duno如何对一个对象的引用进行类型转换。在java虽然我已经完成了这个,但我必须将代码传输到服务器端。

非常感谢, 千斤顶

class SearchRectangle:
    def __init__(self, lower_left_subgrid_x, lower_left_subgrid_y, rectangle_width, rectangle_height):

        self.min_subgrid_x = int(lower_left_subgrid_x)
        self.max_subgrid_x = int(self.min_subgrid_x + rectangle_width -1)
        self.min_subgrid_y = int(lower_left_subgrid_y)
        self.max_subgrid_y = int(self.min_subgrid_y + rectangle_height -1)

     ...blah



class SearchRectangleMultiGrid:
 # parent rectangle should be a SearchRectangle instance 
    def __init__(self, parent_rectangle):
        self.parent_rectangle = SearchRectangle()parent_rectangle



    # test codes
    test_rect = SearchRectangle(test_subgrid.subgrid_x, test_subgrid.subgrid_y, 18, 18)
    print "\n\nTest SearchRectangle";
    print test_rect.to_string()
    print test_rect.sql_clause

    test_rec_multi = SearchRectangleMultiGrid(test_rect)
    print "\n\nTest SearchRectangleMulti"
    test_rec_multi.parent_rectangle.to_string()

3 个答案:

答案 0 :(得分:7)

Python是一种动态类型语言,因此,除非你特别需要它,否则投射一些东西没有多大意义。

在Python中,您应该使用Duck Typing:http://en.wikipedia.org/wiki/Duck_typing

因此,您应该只测试parent_rectangle是否具有您需要的属性,而不是尝试将SearchRectangle()转换为SearchRectangle()

或者,如果您确实希望确保始终获得SearchRectangle(),请使用isinstance,如下所示:

if isinstance(parent_rectangle, SearchRectangle):

这可能是一本很好的读物:http://dirtsimple.org/2004/12/python-is-not-java.html

答案 1 :(得分:2)

没有理由在python中投射任何东西。你想做什么?只需使用您想要的对象,如果它不是正确的类型,它将失败。由于变量名没有与它们相关联的类型,所以没有铸造这样的东西。

答案 2 :(得分:0)

进一步解释:

Casting是对一种类型的对象进行指针/引用的行为,并对编译器说“是的,我知道这是一个foo参考,但请假装它是一个条形参考”。

Python在这个意义上没有指针/引用(尽管在另一种意义上,一切都是引用)。此外,编译器/解释器首先不关心类型是什么。因此,铸造既不可能也没有意义。

所以在你的例子中:跳过类型转换。无论如何它都会工作。如果没有。然后对这个问题提出疑问。