python - Python 类属性更新未传播到父类
问题描述
当我更新实例属性时,该更改不会反映在__str__
父类的方法中。这是有道理的,就像在通话super().__init__
期间__init__
调用的那样,当我对属性进行更新时,它不会再次被调用。
class BulkData:
def __init__(self, fields):
self.fields = fields
def __str__(self):
return ''.join(str(f) for f in self.fields)
class Node(BulkData):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
fields = [self.x, self.y, self.z]
super().__init__(fields)
例子:
n1 = Node(1,2,3)
n1.x = 5
print(n1)
> '123'
我希望结果是'523'
.
解决方案
您在问题中提到“财产”,但这些只是属性。实现这一目标的一种方法是实际使用 a property
:
class BulkData:
def __init__(self, fields):
self.fields = fields
def __str__(self):
return ''.join(self.fields)
class Node(BulkData):
def __init__(self, x, y, z):
self._x = x
self._y = y
self._z = z
fields = [self._x, self._y, self._z]
super().__init__(fields)
@property
def x(self):
return self._x
@x.setter
def x(self, val):
self._x = val
self.fields[0] = val
现在:
>>> n1 = Node('1','2','3')
>>> n1.x = '5'
>>> print(n1)
523
推荐阅读
- python - Scrapy 不会打印到 json、html 或任何其他文件
- spring-boot - Fabric8 的 docker-maven-plugin 中的 docker-compose 不起作用
- python - Python - 增加计数产生意外结果
- javascript - 我正在使用@SwimLineNgx-Chart 水平堆积条形图。图表数据格式与 Api 响应不同。我如何映射任何建议
- python - 将 rdd 转换为数据框:AttributeError: 'RDD' object has no attribute 'toDF' using PySpark
- reactjs - React native createMaterialTopTabNavigator,用图片替换文字
- r - 地图ggplot中的两种比例颜色
- karate - 在空手道 0.9.5 版本中是否可以进行报告门户集成
- java - 如何在附加的 StudentTest.java 文件中交换对象 s1 和 s3
- python - Python 通过 Tor 请求流 - 连接断开