时钟程序继承帮助-Python

时钟程序继承帮助-Python,python,class,inheritance,Python,Class,Inheritance,我正在使用类和继承在Python上创建时钟。我试图在继承日历和时钟的类Fecha中创建一个函数advance()。我试图调用属性self.\uu hora,但我得到“属性错误:Fecha对象没有属性…”。我将只发布部分代码,因为它有点大: class Reloj(object): __segundo = Contador(0, 60) __minuto = Contador(0, 60) __hora = Contador(0, 24) def __init_

我正在使用类和继承在Python上创建时钟。我试图在继承日历和时钟的类Fecha中创建一个函数advance()。我试图调用属性self.\uu hora,但我得到“属性错误:Fecha对象没有属性…”。我将只发布部分代码,因为它有点大:

class Reloj(object):

    __segundo = Contador(0, 60)
    __minuto = Contador(0, 60)
    __hora = Contador(0, 24)

    def __init__(self, s, minu, h):

        self.__segundo.setCuenta(s)
        self.__minuto.setCuenta(minu)
        self.__hora.setCuenta(h)


    def set(self, s, minu, h):

        self.__segundo.setCuenta(s)
        self.__minuto.setCuenta(minu)
        self.__hora.setCuenta(h)

    def tic(self):

        self.__segundo.contar()
类Reloj稍微大一点,但其余的只是显示函数。这是Fecha类:

class Fecha(Reloj, Calendario):

def __init__(self,d,m,a,s,minu,h):

    Reloj.__init__(self,s,minu,h)
    Calendario.__init__(self,d,m,a)

def avanzar(self):

    hora_previa= self.__hora
    Reloj.tic(self)
    if self.__hora < hora_previa:
        self.avanzar()

def __str__(self):

     return Calendario.__str__(self) +","+ Reloj.__str__(self)
Fecha类(Reloj,Calendario):
定义初始值(self、d、m、a、s、minu、h):
重新启动初始化(self,s,minu,h)
日历(self,d,m,a)
def avanzar(自我):
hora_previa=自我
重新启动tic(自我)
如果self.\uuuHora
您的
属性错误
与您使用的属性名称有关。当您在属性名前面加上两个下划线时,将调用Python的名称混乱系统。它将名称从
\uuuuufoo
转换为
\uuuufoo
(如果代码在
SomeClass
类中)。它旨在帮助您编写mixin和代理类,而不必担心无意中的名称冲突

除非您确实需要,否则不应使用该功能。如果属性是私有的,请重命名属性以仅使用一个下划线。或者只是给他们公开的名字,不要费心去隐藏实现细节

您没有显示正在使用的
Contador
类型的代码。如果它不是一个奇特的描述符或其他东西,那么当您在
Reloj
中将它的实例分配给类变量时,可能使用了错误的描述符。您可能希望属性改为实例变量。我建议做一些类似的事情:

class Reloj(object):

    def __init__(self, s, minu, h):

        self._segundo = Contador(0, 60)
        self._minuto = Contador(0, 60)
        self._hora = Contador(0, 24)
        self.set(s, minu, h)

    ...

通过调用
set
,我们可以避免在
\uuuu init\uuuu
中重复其代码,这只需要正确设置属性。前面的代码可能在每个
Reloj
实例之间共享时间值。

不要在变量前使用
\uuu
,而应:

__segundo = Contador(0, 60)
__minuto = Contador(0, 60)
__hora = Contador(0, 24)
你可以用这个:

_segundo = Contador(0, 60)
_minuto = Contador(0, 60)
_hora = Contador(0, 24)

self.\uuu hora
是“privat”。试试这个
self.\u Relog\u hora