Real-world Implementation
Configuration Management System
Flexible Configuration Loading
class ConfigurationLoader:
@classmethod
def from_json(cls, file_path):
import json
with open(file_path, 'r') as f:
config_data = json.load(f)
return cls(config_data)
@classmethod
def from_yaml(cls, file_path):
import yaml
with open(file_path, 'r') as f:
config_data = yaml.safe_load(f)
return cls(config_data)
@classmethod
def from_environment(cls):
import os
config_data = {
'database': os.getenv('DB_CONNECTION'),
'api_key': os.getenv('API_KEY')
}
return cls(config_data)
def __init__(self, config_data):
self.config = config_data
Database Connection Pool
Polymorphic Database Connections
class DatabaseConnectionFactory:
@staticmethod
def create_connection(db_type, **kwargs):
if db_type == 'mysql':
return MySQLConnection(**kwargs)
elif db_type == 'postgresql':
return PostgreSQLConnection(**kwargs)
elif db_type == 'sqlite':
return SQLiteConnection(**kwargs)
else:
raise ValueError(f"Unsupported database type: {db_type}")
class DatabaseConnection:
def __init__(self, host, port, username, password):
self.host = host
self.port = port
self.username = username
self.password = password
class MySQLConnection(DatabaseConnection):
def connect(self):
## MySQL-specific connection logic
pass
class PostgreSQLConnection(DatabaseConnection):
def connect(self):
## PostgreSQL-specific connection logic
pass
class SQLiteConnection(DatabaseConnection):
def __init__(self, database_path):
self.database_path = database_path
Machine Learning Model Factory
Dynamic Model Creation
class ModelFactory:
@classmethod
def create_model(cls, model_type, **kwargs):
if model_type == 'linear_regression':
return LinearRegressionModel(**kwargs)
elif model_type == 'neural_network':
return NeuralNetworkModel(**kwargs)
elif model_type == 'decision_tree':
return DecisionTreeModel(**kwargs)
else:
raise ValueError(f"Unsupported model type: {model_type}")
class BaseModel:
def __init__(self, input_dim, output_dim):
self.input_dim = input_dim
self.output_dim = output_dim
class LinearRegressionModel(BaseModel):
def __init__(self, input_dim, regularization=None):
super().__init__(input_dim, 1)
self.regularization = regularization
class NeuralNetworkModel(BaseModel):
def __init__(self, input_dim, hidden_layers=None):
super().__init__(input_dim, 1)
self.hidden_layers = hidden_layers or [64, 32]
Polymorphic Constructor Scenarios
Scenario |
Use Case |
Benefits |
Configuration Management |
Load configs from multiple sources |
Flexibility |
Database Connections |
Support multiple database types |
Abstraction |
Machine Learning Models |
Dynamic model creation |
Extensibility |
Architecture Overview
flowchart TD
A[Polymorphic Constructors] --> B[Flexible Initialization]
A --> C[Dynamic Object Creation]
B --> D[Configuration Management]
B --> E[Database Connections]
C --> F[Machine Learning Models]
C --> G[Plugin Systems]
Advanced Implementation Patterns
- Use dependency injection
- Implement lazy initialization
- Create adaptive constructors
- Support runtime configuration
Error Handling and Validation
class SafeConstructor:
def __init__(self, *args, **kwargs):
self.validate_inputs(*args, **kwargs)
self.initialize(*args, **kwargs)
def validate_inputs(self, *args, **kwargs):
## Input validation logic
pass
def initialize(self, *args, **kwargs):
## Actual initialization logic
pass
- Cache expensive object creation
- Use
__slots__
for memory efficiency
- Implement lazy loading techniques
Brought to you by LabEx - Advancing software engineering through innovative techniques.