首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新手到python-面向对象编程的问题

新手到python-面向对象编程的问题
EN

Stack Overflow用户
提问于 2021-12-06 15:13:49
回答 3查看 73关注 0票数 2

我用了坡度和距离公式。但我认为索引是错误的方法,或者是吗?

代码语言:javascript
复制
class Line():
    def __init__(self,coord1,coord2):
        self.coord1 = coord1
        self.coord2 = coord2

    def distance(self):
        return ((coord2[0]-coord1[0])**2 + (coord2[1]-coord1[1])**2)**0.5

    def slope(self):
        return (coord2[1] - coord1[1])/(coord2[0]-coord1[0])
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-06 15:16:17

要访问类特定的变量,需要使用self.#varibale name,因此您的函数应该如下所示:

代码语言:javascript
复制
    def distance(self):
        return ((self.coord2[0]-self.coord1[0])**2 + (self.coord2[1]-self.coord1[1])**2)**0.5

    def slope(self):
        return (self.coord2[1] - self.coord1[1])/(self.coord2[0]-self.coord1[0])
票数 5
EN

Stack Overflow用户

发布于 2021-12-06 15:18:31

假设coord是一个元组,我更愿意先对它们进行解压缩以提高可读性:

代码语言:javascript
复制
def slope(self):
    x1,y1 = self.coord1
    x2,y2 = self.coord2
    return (y2 - y1)/(x2-x1)
票数 3
EN

Stack Overflow用户

发布于 2021-12-06 15:19:39

索引没什么问题。如果为组件提供更多的描述性名称,您可能会发现它更具可读性。例如,

代码语言:javascript
复制
def distance(self):
    c1x = self.coord1[0]
    c1y = self.coord1[1]
    c2x = self.coord2[0]
    c2y = self.coord2[1]

    return ((c2x - c1x)**2 + (c2y - c1y)**2)**0.5

你可以用元组解压使它不那么冗长:

代码语言:javascript
复制
def distance(self):
    c1x, c1y = self.coord1
    c2x, c2y = self.coord2

    return ((c2x - c1x)**2 + (c2y - c1y)**2)**0.5

更不用说在复杂的平面上工作了:

代码语言:javascript
复制
def distance(self):
    return abs(complex(**self.coord2) - complex(**self.coord1))

(对于slope,复数技巧涉及到用cmath.polar将两者之间的差异转换为极坐标。)

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

https://stackoverflow.com/questions/70247669

复制
相关文章

相似问题

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