首页 > 解决方案 > 属性类转换 python

问题描述

我的 LabelledPoint 类继承自我的 Point 类。我希望这个类具有 x 和 y 坐标以及一个将是字符串的标签属性。

import numbers
def clamp(v,_min,_max):
    return max(min(v,_max),_min)

class Point:
    def __init__(self,x,y):
        self.x = clamp(x,0,10)
        self.y = clamp(y,0,10)

    def __str__(self):
        return(str((self.x,self.y)))
    @property
    def _add_(self,p):
        a=self.x + p.x
        b=self.y + p.y
        return Point(a,b)

    @property
    def x(self):
        return self.__x
    @x.setter
    def x(self, value):
        if not isinstance(value, numbers.Number):
            raise AttributeError()
        self.__x = clamp(int(value), 0, 10)

    @property
    def y(self):
        return self.__y

    @y.setter
    def y(self, value):
        if not isinstance(value, numbers.Number):
            raise AttributeError()
        self.__y = clamp(int(value), 0, 10)

class LabelledPoint(Point):

        def __init__(self,x,y,label):
            Point.__init__(self,x,y)
            label=str()
            self.label=label

        def __str__(self):
            return (str((self.label)))

        def _get_label(self):
            return self._label

        def _set_label(self,label):
            raise AttributeError()
            label=property(_get_label,_set_label)
            return label

我想获得这个输入:

lp = LabelledPoint(5,15, "foo")
print (lp) # output "(5,10) : foo"

我只获得输出:

(5,10)

我不知道我的错误在哪里谢谢

标签: pythonclassoopattributes

解决方案


def __str__(self):
    return '{} : {}'.format(Point.__str__(self), self.label)

您的_str_方法周围只有一个下划线。它也不会对价值做任何事情Point.__str__(self)

  • @Patrick Haugh

(我自己不能说更好)


推荐阅读