首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中类定义的预期行为

python中类定义的预期行为
EN

Stack Overflow用户
提问于 2016-02-21 23:56:24
回答 2查看 63关注 0票数 0

我读了很多关于python中面向对象编程的文章,但是我没有找到答案。下面是我的示例代码:

代码语言:javascript
运行
复制
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对象,它将失败。我必须强制类型,还是程序员有责任在实例化时给出预期的对象类型?

EN

回答 2

Stack Overflow用户

发布于 2016-02-22 00:33:18

正如其他人所说,强制键入是由您决定的。

但是,Python广泛使用了鸭子类型的概念,这意味着在您的示例中,不一定需要一个Point对象作为中心,只需要一些与Point类行为相同的对象。在这个简单的示例中,Point没有提供任何方法;它只是一个类,它的对象将具有xy属性。这意味着您的Circle可以接受其center的任何对象,只要它提供xy属性,即提供与Point相同的接口。

这意味着要做的最重要的事情是记录您的类提供了什么接口,以及每个函数或方法从其参数中期望什么。

票数 1
EN

Stack Overflow用户

发布于 2016-02-22 00:00:22

强制执行类型由您决定,由调用者提供适当的数据。

python社区的一个基本理念是,我们都是负责任的程序员。如果强制该类型防止意外或恶意错误非常重要,则必须将其内置到对象中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35538294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档