我读了很多关于python中面向对象编程的文章,但是我没有找到答案。下面是我的示例代码:
class Point(object):
"""basic point"""
def __init__(self, x, y):
self.x = x
self.y = y
class Circle(object):
"""basic circle object"""
def __init__(self,center,radius):
self.center = center #should be a point object
self.radius = radius
coord = Point(1, 2)
a = Circle(coord, 4)
b = Circle(4, 5)
如果我理解正确的话,这是一个有效的python代码,但是圆圈"b“没有一个Point对象作为中心。如果circle对象中有一个方法使用center对象进行计算(例如,计算圆的面积),那么对于b对象,它将失败。我必须强制类型,还是程序员有责任在实例化时给出预期的对象类型?
发布于 2016-02-22 00:33:18
正如其他人所说,强制键入是由您决定的。
但是,Python广泛使用了鸭子类型的概念,这意味着在您的示例中,不一定需要一个Point
对象作为中心,只需要一些与Point类行为相同的对象。在这个简单的示例中,Point
没有提供任何方法;它只是一个类,它的对象将具有x
和y
属性。这意味着您的Circle
可以接受其center
的任何对象,只要它提供x
和y
属性,即提供与Point
相同的接口。
这意味着要做的最重要的事情是记录您的类提供了什么接口,以及每个函数或方法从其参数中期望什么。
发布于 2016-02-22 00:00:22
强制执行类型由您决定,由调用者提供适当的数据。
python社区的一个基本理念是,我们都是负责任的程序员。如果强制该类型防止意外或恶意错误非常重要,则必须将其内置到对象中。
https://stackoverflow.com/questions/35538294
复制相似问题