Osio 3. Luku 4
single
Challenge: Refactoring an ABC to a Protocol
Pyyhkäise näyttääksesi valikon
You are given an existing ABC-based interface and two classes that currently inherit from it. Your task is to create an equivalent Protocol, verify that both classes satisfy it without inheritance, and compare isinstance() behavior between the two approaches.
You are given the following existing code:
from abc import ABC, abstractmethod
class Transformer(ABC):
@abstractmethod
def transform(self, data):
pass
@abstractmethod
def get_name(self):
pass
class UpperCaseTransformer(Transformer):
def transform(self, data):
return [item.upper() for item in data]
def get_name(self):
return "UpperCase"
class TrimTransformer(Transformer):
def transform(self, data):
return [item.strip() for item in data]
def get_name(self):
return "Trim"
Tehtävä
Pyyhkäise aloittaaksesi koodauksen
- Import
Protocolandruntime_checkablefromtyping. - Define a
@runtime_checkableProtocol calledTransformerProtocolwith two methods:transform(self, data)andget_name(self), both with...as their body. - Define a new class
ReverseTransformer(do not inherit fromTransformerorTransformerProtocol) with:transform(self, data)that returns a list of reversed strings:[item[::-1] for item in data];get_name(self)that returns"Reverse".
- Create instances:
upper = UpperCaseTransformer(),trim = TrimTransformer(),reverse = ReverseTransformer(). - Store the following in variables:
upper_abc=isinstance(upper, Transformer);reverse_abc=isinstance(reverse, Transformer);upper_proto=isinstance(upper, TransformerProtocol);reverse_proto=isinstance(reverse, TransformerProtocol).
- Print all four variables.
Ratkaisu
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 3. Luku 4
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme