Skip to content

[3rd Edition] Item 31: Attribute assignment failure #124

@0UTERQISS

Description

@0UTERQISS

The execution of this example fails, since count is assigned to average:

from dataclasses import dataclass

@dataclass
class Stats:
    minimum: float
    maximum: float
    average: float
    median: float
    count: int

def get_stats_obj(numbers):
    return Stats(
        minimum=min(numbers),
        maximum=max(numbers),
        count=len(numbers),
        average=sum(numbers) / count,
        median=get_median(numbers),
    )

result = get_stats_obj(lengths)
print(result)

Output:

     13 def get_stats_obj(numbers):
     14     return Stats(
     15         minimum=min(numbers),
     16         maximum=max(numbers),
     17         count=len(numbers),
---> 18         average=sum(numbers) / count,
     19         median=get_median(numbers),
     20     )

NameError: name 'count' is not defined

Suggestion 1: define a variable count and assign it to the attribute:

@dataclass
class Stats:
    minimum: float
    maximum: float
    average: float
    median: float
    count: int

def get_stats_obj(numbers):
    count = len(numbers)
    return Stats(
        minimum=min(numbers),
        maximum=max(numbers),
        count= count,
        average=sum(numbers) / count,
        median=get_median(numbers),
    )

result = get_stats_obj(lengths)
print(result)

Suggestion 2: replace average=sum(numbers) / count, by average=sum(numbers) / len(numbers),

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions