Ahmad Qassym Ответов: 2

Может ли подкласс Удалить Свойства из родительского класса и как это сделать ?


## the first example
class quadriLateral:
    def __init__(self, a, b, c, d):
        self.side1=a
        self.side2=b
        self.side3=c
        self.side4=d

    def perimeter(self):
        p=self.side1 + self.side2 + self.side3 + self.side4
        print("perimeter=",p)

class rectangle(quadriLateral):
         def __init__(self, a, b):
            super().__init__(a, b, a, b)

class square(rectangle):
    def __init__(self, a):
        super().__init__(a, a)
    def area(self):
        a=pow(self.side1, 2)
        print('Area of Square: ', a)
##
###############
## the second example
class TwoDObject:
    def __init__(self,x:float=0,y:float=0):
        self.x = x
        self.y = y
    def move(self,xchange:float=0,ychange:float=0):
        self.x = self.x + xchange
        self.y = self.y + ychange
    def area(self):
        return 0

class Circle(TwoDObject):
    def __init__(self,radius:float=1 , x:float=0, y:float=0):
        self.radius = radius
        super().__init__(x,y) 
    def area(self):
        return (self.radius*self.radius * 3.14)    
    def size_change(self,percent:float):
        self.radius = self.radius * (percent/100)


Что я уже пробовал:

как я знаю, подкласс может только добавлять функциональность и свойства к родительскому классу, но не может удалить их.
во втором примере (класс TwoDObject и sub.Cl. Circle) круг добавляет свойства к суперклассу (TWoD.) (он добавляет свойство radius), и для меня это нормально.
в то время как в первом примере и то,что я нахожу странным ( четырехугольник и прямоугольник), прямоугольник удаляет свойства из суперкласса (c, d удаляются и имеют только a и b), а квадрат удаляет 3 атрибута.
Мой вопрос заключается в том, как класс может удалить атрибуты из родительского класса и как это сделать?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Я не думаю, что это возможно в Python, см. 9. классы — документация Python 3.7.8[^А зачем вам это нужно?


Ahmad Qassym

я видел этот пример на сайте:
https://www.tutorialsteacher.com/python/inheritance-in-python

Richard MacCutchan

Я не вижу здесь ничего относящегося к вашему вопросу. Это просто объясняет стандартные правила наследования.

Рейтинг:
0

OriginalGriff

Ты можешь ... иш.
На самом деле вы не можете удалить родительские свойства методов, но их можно "скрыть" : Скрытие наследуемых свойств и задач в производных классах[^]