Я не понимаю, здесь что-то, что является базовым c Как я могу использовать свойство из базы, которая также является абстрактным классом из его подкласса, здесь небольшой код:
from abc import abstractmethod, ABC
class Base(ABC):
@property
def is_ver0(self):
return None
@abstractmethod
def execute_sql(self):
print("Base execute_sql")
def print_and_exit(self):
print("Base")
А вот подкласс который реализует execute_ sql, а также хочет установить и получить значение базы is_ver0 Хотя я могу без проблем вызывать super (). print_and_exit, я могу вызывать super (). is_ver0 почему?
from base import Base
class Sub(Base):
def __init__(self):
self.execute_sql()
def execute_sql(self):
print("Sub execute_sql")
super().print_and_exit
super().is_ver0 = 1
q = super().is_ver0
print(q)
if __name__ == '__main__':
s = Sub()
s.execute_sql()
но я получаю эту ошибку:
raceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python-ce\helpers\pydev\pydevd.py", line 1434, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Dev/python/new_tester/sub.py", line 22, in <module>
s = Sub()
File "C:/Dev/python/new_tester/sub.py", line 10, in __init__
self.execute_sql()
File "C:/Dev/python/new_tester/sub.py", line 16, in execute_sql
super().is_ver0 = 1
AttributeError: 'super' object has no attribute 'is_ver0'
ОБНОВЛЕНИЕ все еще ошибка, я добавил сеттер в базовый класс, и все же я получил ошибку, что c что мне здесь не хватает?
class Base(ABC):
__xx = None
@property
def is_ver0(self):
return self.__xx
@__xx.setter
def set_x(self,xxx):
self.__xx = xxx
@abstractmethod
def execute_sql(self):
print("Base execute_sql")
def print_and_exit(self):
print("Base")
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Dev\python\new_tester\base.py", line 2, in <module>
class Base(ABC):
File "C:\Dev\python\new_tester\base.py", line 8, in Base
@__xx.setter
AttributeError: 'NoneType' object has no attribute 'setter'