google提供的python风格指南-属性说明 问题:
请详细说明关于属性的Goolge Python Stile指南: 如果属性本身未被重写,则具有属性的继承可以是不明显的 确保属性调用子类中重写的方法google提供的python风格指南-属性说明 问题:,python,Python,请详细说明关于属性的Goolge Python Stile指南: 如果属性本身未被重写,则具有属性的继承可以是不明显的 确保属性调用子类中重写的方法 不明显的意味着什么?潜在的问题是什么 确保被属性调用的重写方法是什么意思?潜在的问题是什么 2.13.4决定 如果属性本身未被覆盖,则带有属性的继承可能是不明显的。因此,必须确保间接调用访问器方法,以确保子类中重写的方法由属性调用(使用模板方法设计模式) 不明显的是,当您从类继承时,必须特别考虑如何重写子类中的属性,因为定义可能分布在多个方法之间
如果属性本身未被覆盖,则带有属性的继承可能是不明显的。因此,必须确保间接调用访问器方法,以确保子类中重写的方法由属性调用(使用模板方法设计模式)
不明显的是,当您从类继承时,必须特别考虑如何重写子类中的属性,因为定义可能分布在多个方法之间 如果以不同方式定义了实现
区域
属性的Square
子类,则需要执行以下操作之一:
Square.\u get\u area()
和Square.\u set\u area()
方法,只能通过属性方法调用。然后可以在子类中定义新属性\u get\u area()
和\u set\u area()
方法。然后就不需要重新定义属性了——它们将被正常继承,但将调用子类的内部方法这两个问题都不复杂,但当从具有属性的类继承时,可能需要额外检查这些问题。我看不到问题1的答案。为什么带有属性的继承是不明显的?如果您不解释这一点,那么首先就没有任何理由引入
\u get\u area
和\u set\u area
。这并不明显,因为您必须注意属性和内部方法之间的关系。我认为从剩下的答案中可以明显看出这一点。
import math
class Square:
"""A square with two properties: a writable area and a read-only perimeter.
To use:
>>> sq = Square(3)
>>> sq.area
9
>>> sq.perimeter
12
>>> sq.area = 16
>>> sq.side
4
>>> sq.perimeter
16
"""
def __init__(self, side):
self.side = side
@property
def area(self):
"""Area of the square."""
return self._get_area()
@area.setter
def area(self, area):
return self._set_area(area)
def _get_area(self):
"""Indirect accessor to calculate the 'area' property."""
return self.side ** 2
def _set_area(self, area):
"""Indirect setter to set the 'area' property."""
self.side = math.sqrt(area)
@property
def perimeter(self):
return self.side * 4