我一直在尝试搜索如何在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()
答案 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在这个意义上没有指针/引用(尽管在另一种意义上,一切都是引用)。此外,编译器/解释器首先不关心类型是什么。因此,铸造既不可能也没有意义。
所以在你的例子中:跳过类型转换。无论如何它都会工作。如果没有。然后对这个问题提出疑问。