在1994年的《四人帮》一书中, Design Patterns: Elements of Reusable Object-Oriented Software 中,我注意到在C ++代码示例中,所有方法都声明为{{ 1}}或protected
(从不作为private
),并且所有属性都被声明为private
(从不被称为public
或{{1} }。
在第一种情况下,我假设作者使用protected
方法而不是protected
方法来允许实现继承(子类可以委派给他们)。
在第二种情况下,虽然我知道避免使用private
和public
属性可以防止破坏数据封装,但是如果子类需要访问父类属性,如何不使用它们呢? / strong>
例如,如果protected
属性为AttributeError
而不是get_salary()
,则以下Python代码将在_age
方法调用中引发private
,也就是说它是否命名为protected
:
__age
答案 0 :(得分:0)
我终于找到了一个显而易见的解决方案:在子类中重新声明父类的private
属性:
class Person:
def __init__(self, age):
self.__age = age # private attribute
class Employee(Person):
def __init__(self, age):
self.__age = age # private attribute
def get_salary(self):
return 5000 * self.__age
Employee(32).get_salary() # 160000