Learn Interfaces by Building an Equation Solver - Step 30

Tell us what’s happening:

Here’s what the prompt is asking for:

“Within the QuadraticEquation class, define an init method. Use super() to call the init method from the parent class. Then, define a new attribute named delta, which stores the value of the discriminant of the equation.”

I’ve tried several ways to solve it, but I’m still getting errors. Can someone check if there’s something missing or something extra?

Your code so far

from abc import ABC, abstractmethod

class Equation(ABC):
    degree: int
  
    def __init__(self, *args):
        if (self.degree + 1) != len(args):
            raise TypeError(
                f"'Equation' object takes {self.degree + 1} positional arguments but {len(args)} were given"
            )
        if any(not isinstance(arg, (int, float)) for arg in args):
            raise TypeError("Coefficients must be of type 'int' or 'float'")
        if args[0] == 0:
            raise ValueError("Highest degree coefficient must be different from zero")
        self.coefficients = {(len(args) - n - 1): arg for n, arg in enumerate(args)}

    def __init_subclass__(cls):
        if not hasattr(cls, "degree"):
            raise AttributeError(
                f"Cannot create '{cls.__name__}' class: missing required attribute 'degree'"
            )

    def __str__(self):
        terms = []
        for n, coefficient in self.coefficients.items():
            if not coefficient:
                continue
            if n == 0:
                terms.append(f'{coefficient:+}')
            elif n == 1:
                terms.append(f'{coefficient:+}x')                
        equation_string = ' '.join(terms) + ' = 0'
        return equation_string.strip('+')        
    
    @abstractmethod
    def solve(self):
        pass
        
    @abstractmethod
    def analyze(self):
        pass
        
class LinearEquation(Equation):
    degree = 1
    
    def solve(self):
        a, b = self.coefficients.values()
        x = -b / a
        return x

    def analyze(self):
        slope, intercept = self.coefficients.values()
        return {'slope': slope, 'intercept': intercept}

class QuadraticEquation(Equation):
    degree = 2

# User Editable Region

    def __init__(self, *args):
        super().__init__(*args) 
         
        a, b, c = self.args
        self.delta = b**2-4*a*c


# User Editable Region

    def solve(self):
        pass
    
    def analyze(self):
        pass

lin_eq = LinearEquation(2, 3)
print(lin_eq)

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36

Challenge Information:

Learn Interfaces by Building an Equation Solver - Step 30

Ja encontrei meu erro, fiz a chamada de forma errada

There’s no self.args. If you want to unpack the coefficients, look at what you did previously.

Thanks for pointing that out. I’ll revisit my previous steps to see how I unpacked the coefficients. I must have missed a key detail. Appreciate the help!