【发布时间】:2020-08-20 18:06:55
【问题描述】:
我目前正在学习 Python 中的面向对象编程。我在理解如何传递给我从 Parten 类继承的所有方法方面遇到了一些问题。我将向您展示代码示例。
您可以在下面看到我的 Parent 类(它是简单的 api 包装器)。
class AlphaVantageClient:
_URL = "https://www.alphavantage.co/query?"
def __init__(self, api_key=None):
self.__api_key = api_key
def show_base_url(self):
print(self._URL)
def set_api_key(self, api_key: str):
self.__api_key = api_key
def __call_api(self, query_parameters: dict,**kwargs):
"""
The structure looks like:
co./query?function{}&symbol{}
:param query_parameters:
:return: response
"""
query_parameters["apikey"] = self.__api_key
response = requests.get(
AlphaVantageClient._URL,
params=query_parameters,
proxies=self.__proxy
)
validate_http_status(response)
return response.json()
def company_overview(self, ticker: str, **kwargs):
query_parameters = {
"function": "OVERVIEW",
"symbol": ticker
}
return self.__call_api(query_parameters, **kwargs)
def balance_sheet(self, ticker: str, **kwargs):
query_parameters = {
"function": "BALANCE_SHEET",
"symbol": ticker
}
return self.__call_api(query_parameters, **kwargs)
def income_statement(self, ticker: str, **kwargs):
query_parameters = {
"function": "INCOME_STATEMENT",
"symbol": ticker
}
return self.__call_api(query_parameters, **kwargs)
def cash_flow(self, ticker: str, **kwargs):
query_parameters = {
"function": "CASH_FLOW",
"symbol": ticker
}
return self.__call_api(query_parameters, **kwargs)
下面是我的子类,我想从AlphaVantageClient类继承所有方法。
class Stock(AlphaVantageClient):
def __init__(self, ticker: str):
super().__init__()
self.ticker = ticker
self.client = AlphaVantageClient()
def set_api_key(self, api_key):
self.client.set_api_key(api_key)
但我的问题是,正如您在AlphaVantegeClient 中看到的那样,我的所有方法都有参数symbol,我想在一行或类似的内容中设置所有方法都有我的symbol 参数集从Stock 类到self.ticker。有可能这样做吗?或者我需要以某种方式重构父类代码?
【问题讨论】:
-
因此在
AlphaVantageClient.__init__中接受ticker并将其存储为self.ticker,就像您对self.__api_key所做的那样 -
并且可以根据
self.ticker给符号参数赋予默认值 -
伙计们,你能看看我下面的答案。我认为我们彼此不了解,或者我只是不知道如何实施您的解决方案。
标签: python-3.x oop inheritance python-requests