Как заставить управляемый атрибут декоратора / дескриптора принять итерацию, чтобы исключить дублирование кода? - PullRequest
0 голосов
/ 24 апреля 2020

Код ниже от этого репо . Она сопровождает книгу Программирование на Python 3: Полное введение в язык Python (Библиотека разработчика) .

Эта часть кода показывает использование декоратора valid_number для применять minimum и maximum значения для price и quantity из StockItem.

@valid_number('price', minimum=0, maximum=1e6)
@valid_number('quantity', minimum=1, maximum=1000)
class StockItem:

    def __init__(self, name, category, price, quantity):
        self.name = name
        self.category = category
        self.price = price
        self.quantity = quantity

В моем случае у меня есть класс с двумя атрибутами с одинаковыми ограничениями, поэтому Декораторы выглядят так:

@valid_number('price', minimum=0, maximum=1e6)
@valid_number('quantity', minimum=0, maximum=1e6)
class StockItem:
    ...

Я бы хотел написать что-то вроде ...

@valid_number(['price','quantity'], minimum=0, maximum=1e6)

, чтобы применить ограничение к обоим атрибутам. Я все еще прорабатываю все нюансы декораторов и дескрипторов, поэтому я не знаю, возможно ли это. Полная реализация дескриптора и декоратора находится в репо .

...