【问题标题】:maximum recursion depth exceeded: abstract property inheritance in python超出最大递归深度:python 中的抽象属性继承
【发布时间】:2021-12-09 14:56:54
【问题描述】:

我正在尝试定义一个具有抽象属性的抽象类,然后可以在具体类中继承该抽象类。但它给了我maximum recursion depth exceededVechile 是一个抽象类,Car 实现了该类。基类有一个名为parking_ticket 的属性,我将其排除在抽象类的__init__ 之外,并定义了一个名为parking_ticket 的属性来充当getter 和setter。请帮我指出错误在哪里。

抽象类

"""
module string
"""
from abc import ABC, abstractmethod
from vehicle_type import VehicleType
from parking_ticket import ParkingTicket


class Vechile(ABC):
    """
    class docstring
    """
    @abstractmethod
    def __init__(self, license_plate: str,
                 kind_of_vehicle: VehicleType) -> None:
        self.plate_number = license_plate
        self.vehicle_type = kind_of_vehicle
        self.parking_ticket = None

    @property
    @abstractmethod
    def parking_ticket(self):
        pass

    @parking_ticket.setter
    @abstractmethod
    def parking_ticket(self, parking_ticket: ParkingTicket):
        pass

具体类

from vehicle import Vechile
from vehicle_type import VehicleType
from parking_ticket import ParkingTicket
from datetime import datetime, timedelta


class Car(Vechile):

    def __init__(self,
                 license_plate: str) -> None:
        super().__init__(license_plate, VehicleType.CAR)

    @property
    def parking_ticket(self):
        return self.parking_ticket

    @parking_ticket.setter
    def parking_ticket(self,
                       ticket: ParkingTicket):
        self.parking_ticket = ticket


p_ticket = ParkingTicket(ticket_number="123",
                         plate_number="12345",
                         allocated_spot_id=10,
                         issued_at=datetime.utcnow(),
                         vaccated_at=datetime.utcnow() + timedelta(hours=5),
                         charges=50
                         )
c = Car('MH53TS7618')
c.parking_ticket = p_ticket
print(c)

【问题讨论】:

  • 类名中的错字,你写的是“Vechile”。

标签: python-3.x abstract-class abc


【解决方案1】:

找到了答案。我使用与方法名称和实例变量相同的变量名称。因此发生了运行时异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2021-02-07
    • 2017-03-18
    • 2015-04-15
    • 2018-04-14
    相关资源
    最近更新 更多