【发布时间】:2017-12-23 13:09:55
【问题描述】:
我有一个文件,其中包含我想用来存储 API 端点的类。
我想使用类的原因是我可以通过键入api.level2.resources 来访问端点。
这是文件的样子,API 作为主类,SubEntries 是“孩子”:
class API(object):
"""
A class for logging to stdout and/or a file. Supports color output for different log kinds.
"""
def __init__(self):
"""
:param log_to_file: Bool - Whether to log to a file or only to stdout (False)
:param s: String - Log file name without extension for success logs
:param e: String - Log file name without extension for error logs
:param prefix: Bool - Whether to show the prefix or not
:param timestamp: Bool - Whether to show the timestamp or not
:param debug: Bool - Whether to show debug messages or not
"""
self.login = '/login'
self.logout = '/logout'
self.sysRequest = '/sysReq'
self.level2 = SubEntries()
class SubEntries(API):
def __init__(self):
super().__init__()
self.host_info = '/info'
self.resources = '/resources'
但是,当我尝试像这样使用它时:
from src import API
api = API()
print(api.level2.resources)
我收到以下错误:
Traceback (most recent call last):
File "D:/_projects/pynap/new.py", line 4, in <module>
api = API()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
...
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
File "D:\_projects\pynap\src\QAPI.py", line 24, in __init__
super().__init__()
File "D:\_projects\pynap\src\QAPI.py", line 18, in __init__
self.level2 = SubEntries()
RecursionError: maximum recursion depth exceeded while calling a Python object
我很确定解决方案很简单,我只是不确定如何构建类以便能够按照我的意愿使用它。
【问题讨论】:
-
好吧,你期待什么?每当你实例化你的
API对象时,它的__init__()方法就会被调用,然后它会实例化一个SubEntries对象,该对象的__init__()方法会被调用,它会调用它的父__init__()方法来实例化另一个SubEntries实例等等等等…… -
@zwer 我知道这一点,但我不知道如何以其他方式访问子类的值。我只想初始化父类,但仍然将子类及其值加载到level2中。
标签: python-3.x class oop inheritance