Witam,
Wykonuję metodę z klasy wybranej na podstawie wartości zmiennej (symulacja w main.py)
Jest to oczywiście początkowy szablon, więc każda z klas będzie miała dodatkowo swoje własne metody czy atrybuty.
Oczywiście zanim na poważnie przejdę do dalszego pisania to wolałbym się troszkę bardziej podszkolić ale zalążek już stworzyłem.
Może ocenicie? :)
Zastanawia mnie :
- Jak to napisać bez używania globals()?
- Jak można to ulepszyć?
- Czy widzicie tu coś wyjątkowo złego?
Python : 3.7.4
main.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import os
sys.path.insert(1, os.path.dirname(os.path.abspath(__file__)))
from template import Template
if __name__ == "__main__":
print(Template("Base"))
print(Template("One"))
print(Template("Two"))
template.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from base import Base
from one import One
from two import Two
class Template(object):
__slots__ = ('class_name',)
def __init__(self, class_name: str) -> None:
self.class_name = class_name
def __str__(self) -> str:
return globals()[self.class_name]().get_template()
base.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class Base(object):
__slots__ = ('template',)
def __init__(self) -> None:
self.template = "Template Base class"
def set_template(self, template: str) -> None:
self.template = template
def get_template(self) -> str:
return self.template
one.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from base import Base
class One(Base):
__slots__ = ('template',)
def __init__(self) -> None:
self.template = "Template One class"
def set_template(self, template: str) -> None:
self.template = template
def get_template(self) -> str:
return self.template
two.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from base import Base
class Two(Base):
__slots__ = ('template',)
def __init__(self) -> None:
self.template = "Template Two class"
pass
def set_template(self, template: str) -> None:
self.template = template
def get_template(self) -> str:
return self.template