Я немного запутался в том, как напрямую наследовать переменные из функции родительского класса '__init__
.Например, у меня есть следующее:
class BaselineModels:
def __init__(self):
self.logpath = './log/models/'
self.mpath = './models/'
Затем я создаю подкласс, который имеет свой собственный __init__
и вызывает super()
, но я не могу получить доступ к self.mpath
.Я знаю, что это связано с тем, что self
привязан к экземпляру класса, но как мне добиться этой функциональности, поскольку у меня есть достаточное количество подклассов, для которых я не хочу реплицировать эти переменные пути.
Причина, по которой я хочу этого, заключается в том, что я вызываю функции из этого родительского класса из моего подкласса, который использует переменные родительского класса self
(csv_to_df
является членом родительского класса):
def csv_to_df(self) -> tuple:
"""Reads in CSV file declared in __init__ (self.rpath) and converts it to a number of Pandas DataFrames.
Returns:
tuple: Returns tuple of Pandas DataFrames; user features, item features and
interactions between items.
"""
df = pd.read_csv(self.rpath, sep='\t')
return df
Вызов этого из подкласса приводит к
Traceback (most recent call last):
File "model_baselines.py", line 480, in <module>
als.run()
File "model_baselines.py", line 366, in run
df = self.csv_to_df()
File "model_baselines.py", line 46, in csv_to_df
df = pd.read_csv(self.rpath, sep='\t')
AttributeError: 'ALS' object has no attribute 'rpath'
Определение подкласса
class ALS(BaselineModels):
def __init__(self):
super()
self.model_name = 'als'
def run(self):
df = self.csv_to_df()
Я вызываю als.run()
из нижней части файла.
РЕДАКТИРОВАТЬ: Обновлено, чтобы включить определение подкласса