Поэтому подподкласс должен вызывать метод «store_data» «BaseClass» (супер-суперкласс).
Можете ли вы мне помочь?
BaseClasse
Код: Выделить всё
from multipledispatch import dispatch
from Utils.StoredDataUtils import StoredDataUtils
from Resources.Constants import Directories, DataFilenames
from Utils.FileUtils import FileUtils
class BaseClass():
__id = None
def __init__(self, id):
self.__id = id
#region - Getter Methods
def get_id(self):
return self.__id
#endregion
#region - Setter Methods
def set_id(self, id):
self.__id = id
#endregion
#region - Public Methods
#region - Store Data Methods
@dispatch(object, str)
def store_data(self, filename):
StoredDataUtils.store_data(FileUtils.join_filepath(Directories.DIR_STORED_DATA, filename), self)
@staticmethod
@dispatch(str)
def get_stored_data(filename):
path = FileUtils.join_filepath(Directories.DIR_STORED_DATA, filename)
if(FileUtils.check_file_exists(path)):
return StoredDataUtils.get_stored_data(path)
else:
return None
#endregion
#endregion
# To String
def __str__(self):
return "####################\n"\
f"# {BaseClass.__name__}\n"\
f"#- __id: {self.__id}\n"\
"####################"
Код: Выделить всё
from Classes.BaseClasses.BaseClass import BaseClass, dispatch
from Classes import Portfolio
class Investor(BaseClass):
__mName = None
__mSurname = None
__mUsername = None
__mPortfolio = None
__mNumOfCopiers = None
__mNumOfFollowers = None
__mCopiers = []
__mTotCapital = None
__mTotPL = None
__mPercPL = None
def __init__(self, id):
super().__init__(id)
self.__mCopiers = []
#region - Getter Methods
def get_name(self):
return self.__mName
def get_surname(self):
return self.__mSurname
def get_username(self):
return self.__mUsername
def get_portfolio(self):
return self.__mPortfolio
def get_num_of_copiers(self):
return self.__mNumOfCopiers
def get_num_of_followers(self):
return self.__mNumOfFollowers
def get_copiers(self):
return self.__mCopiers
def get_tot_capital(self):
return self.__mTotCapital
def get_tot_pl(self):
return self.__mTotPL
def get_perc_pl(self):
return self.__mPercPL
#endregion
#region - Setter Methods
def set_name(self, name):
self.__mName = name
def set_surname(self, surname):
self.__mSurname = surname
def set_username(self, username):
self.__mUsername = username
def set_portfolio(self, portfolio):
self.__mPortfolio = portfolio
def set_num_of_copiers(self, num):
self.__mNumOfCopiers = num
def set_num_of_followers(self, num):
self.__mNumOfFollowers = num
def set_copiers(self, copiers):
self.__mCopiers = copiers
def set_tot_capital(self, tot):
self.__mTotCapital = tot
def set_tot_pl(self, pl):
self.__mTotPL = pl
def set_perc_pl(self, perc):
self.__mPercPL = perc
#endregion
#region - Public Methods
@dispatch(object)
def store_data(self):
super().store_data(DataFilenames.FILENAME_INVESTOR_DATA_LIST)
@dispatch()
def get_stored_data():
return super().get_stored_data(DataFilenames.FILENAME_INVESTOR_DATA_LIST)
#endregion
# To String
def __str__(self):
return "####################\n"\
f"# {Investor.__name__}\n"\
"####################\n"\
f"{super().__str__()} \n"\
f"#- __mName: {self.__mName} \n"\
f"#- __mSurname: {self.__mSurname} \n"\
f"#- __mUsername: {self.__mUsername} \n"\
f"#- __mPortfolio: {str(self.__mPortfolio)} \n"\
f"#- __mNumOfCopiers: {self.__mNumOfCopiers} \n"\
f"#- __mNumOfFollowers: {self.__mNumOfFollowers} \n"\
f"#- __mCopiers: {str(self.__mCopiers)} \n"\
f"#- __mTotCapital: {self.__mTotCapital} \n"\
f"#- __mTotPL: {self.__mTotPL} \n"\
f"#- __mPercPL: {self.__mPercPL} \n"\
"####################"
Код: Выделить всё
from Classes.Investor import Investor, BaseClass, dispatch
from Resources.Constants import Directories, DataFilenames
class MainUser(Investor):
__mPassword = None
__mTradingBots = []
__mPlatformsData = []
__mPercCapitalBots = None
def __init__(self, id):
super().__init__(id)
self.__mTradingBots = []
self.__mPlatformsData = []
#region - Getter Methods
def get_password(self):
return self.__mPassword
def get_trading_bots(self):
return self.__mTradingBots
def get_platforms_data(self):
return self.__mPlatformsData
def get_perc_capital_bots(self):
return self.__mPercCapitalBots
#endregion
#region - Setter Methods
def set_password(self, password):
self.__mPassword = password
def set_trading_bots(self, bots):
self.__mTradingBots = bots
def set_platforms_data(self, data):
self.__mPlatformsData = data
def set_perc_capital_bots(self, perc):
self.__mPercCapitalBots = perc
#endregion
#region - Public Methods
@dispatch(object)
def store_data(self):
super().store_data(DataFilenames.FILENAME_MAIN_USER_DATA)
@dispatch()
def get_stored_data():
return BaseClass.get_stored_data(DataFilenames.FILENAME_MAIN_USER_DATA)
#endregion
# To String
def __str__(self):
return "####################\n"\
f"# {MainUser.__name__}\n"\
f"{super().__str__()} \n"\
f"#- __mPassword: {self.__mPassword}\n"\
f"#- __mTradingBots: {str(self.__mTradingBots)}\n"\
f"#- __mPlatformsData: {self.__mPlatformsData}\n"\
f"#- __mPercCapitalBots: {self.__mPercCapitalBots}\n"\
"####################"
Traceback (последний последний вызов): Файл "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/main.py",
строка 15, в
main() Файл "/home/z3r0/Desktop/Doing/ Trading/Coding/TradingBot/TradingBot/main.py",
строка 7, в основном
Environment() файле "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/Environment. py",
строка 12, в файле init
self.__init() "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/Environment.py ",
строка 41, в файле __init
self.__init_main_user() "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/Environment.py",
строка 49 , в __init_main_user
self.__mMainUser.store_data() Файл "/usr/lib/python3/dist-packages/multipledispatch/dispatcher.py", строка
435, в call
raise NotImplementedError( NotImplementedError: Не удалось найти подпись для store_data:
Не могли бы вы объяснить и помочь мне?
Большое спасибо!
StoredDataUtils
Код: Выделить всё
import pickle, os
class StoredDataUtils(object):
def store_data(path, data):
with open(path, 'wb') as f:
pickle.dump(data, f)
def get_stored_data(path):
ret = None
with open(path, 'rb') as f:
ret = pickle.load(f)
return ret
Код: Выделить всё
import os
class FileUtils(object):
def check_file_exists(file):
return os.path.exists(file)
def join_filepath(dir, filename):
return os.path.join(dir, filename)
Обратная трассировка (последний вызов): файл "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/ TradingBot/main.py",
строка 15, в файле
main() "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/main.py",
строка 7 в основном файле
Environment() "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/Environment.py",
строка 12 в init
self.__init() Файл "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/Environment.py",
строка 41, в __init
self. __init_main_user() Файл "/home/z3r0/Desktop/Doing/Trading/Coding/TradingBot/TradingBot/Environment.py",
строка 49, в файле __init_main_user
self.__mMainUser.store_data() "/ usr/lib/python3/dist-packages/multipledispatch/dispatcher.py", строка
435, в вызове
raise NotImplementedError( NotImplementedError: Не удалось найти подпись для store_data: < >
Ожидается вызов метода супер-супер-класса
Подробнее здесь: https://stackoverflow.com/questions/790 ... ch-in-this