如何在python中从子类永久更改超类中的属性值

  • 本文关键字:超类 属性 python 子类 python oop
  • 更新时间 :
  • 英文 :


当我调用changeColor方法时,我想永久地更改View类中属性pen_color的值,并且该值仍然是永久的,除非我用另一种颜色再次调用该方法,当我调用changeColor方法时,pen_color属性仍然具有相同的值,我不想要这样的东西有没有办法做这样的事?

class View: 
def __init__(self):
self.pen_color = 'red'

class Button(View): 
def __init__(self):
pass

def changeColor(self):
super().__init__()

self.pen_color = 'green'

您应该将笔颜色的声明移动到类属性而不是实例属性中,并将其引用为View.pen_color

完成此操作后,View.pen_color将是永久的和全局的,但可以在View或Button实例中被self.pen_color遮蔽。

这不是最佳实践,但如果你真的想这样做,那么你可以这样做。要做到这一点,需要制作一个函数来设置超类'__init__()中的初始颜色,然后稍后更改该函数。下面是一个示例:

class View:
def __init__(self):
self.initColor()
def initColor(self):
self.pen_color = 'red'

class Button(View):
def __init__(self):
super().__init__()
def changeColor(self, color):
def newColor(self):
self.pen_color = color
View.initColor = newColor

btn = Button()
print(btn.pen_color) # returns 'red'
btn.changeColor('green')
btn2 = Button()
print(btn2.pen_color) # returns 'green'

最新更新