Нет способа узнать, что находится внутри __init__
до создания экземпляра.
Вы можете проверить их только после, и один из способов сделать это - vars()
:
defy = Default()
for name,value in vars(defy).items():
if isinstance(value, Shape):
# manipulate
Для выполнения вышеприведенного на всех классах в someModule.py, которые также являются подклассами Base
:
import someModule
instances = []
for cls_name,cls in vars(someModule):
if issubclass(cls, Base):
obj = cls()
for name,value in vars(cls).items():
if isinstance(value, Shape):
# manipulate
instances.append(obj)
Вместо этого, если вы хотите манипулировать каким Shape
Подкласс будет создан, вы должны будете сделать их атрибутами класса, например:
class Default(Base):
default_shapes = [Rectangle, Circle, Sphere]
def __init__(self):
self.shapes = [shape() for shape in self.__class__.default_shapes]