Метод вызова Python базового класса (супер-суперкласса) и использование диспетчеризации в этом случаеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Метод вызова Python базового класса (супер-суперкласса) и использование диспетчеризации в этом случае

Сообщение Anonymous »

Привет, у меня есть эти 3 класса, и я хочу вызвать из суперсуперкласса метод базового класса, который реализован как в суперклассе с той же сигнатурой подподподкласса, так и в базовом классе. (супер-суперкласс) с другой сигнатурой.
Поэтому подподкласс должен вызывать метод «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
FileUtils

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»