@@ -1565,6 +1565,14 @@ def __init__(self, name: str, item_type: Union[Type, Sequence[Type]], descriptio
15651565 self .separator : Optional [str ] = separator
15661566 self ._convertor : Convertor = get_convertor (item_type ) if isinstance (item_type , type ) else None
15671567 super ().__init__ (name , list , description , required , default )
1568+ def _check_value (self , value : List ) -> None :
1569+ super ()._check_value (value )
1570+ if value is not None :
1571+ i = 0
1572+ for item in value :
1573+ if item .__class__ not in self .item_types :
1574+ raise ValueError (f"List item[{ i } ] has wrong type" )
1575+ i += 1
15681576 def _get_as_typed_str (self , value : Any ) -> str :
15691577 result = convert_to_str (value )
15701578 if len (self .item_types ) > 1 :
@@ -1641,13 +1649,7 @@ def set_value(self, value: List) -> None:
16411649 ValueError: When the argument is not a valid option value.
16421650 """
16431651 self ._check_value (value )
1644- if value is not None :
1645- i = 0
1646- for item in value :
1647- if item .__class__ not in self .item_types :
1648- raise ValueError (f"List item[{ i } ] has wrong type" )
1649- i += 1
1650- self ._value = value
1652+ self ._value = None if value is None else [i for i in value ]
16511653 def load_proto (self , proto : ConfigProto ) -> None :
16521654 """Deserialize value from `.ConfigProto` message.
16531655
@@ -2149,13 +2151,21 @@ def __init__(self, name: str, description: str, item_type: Type[Config], *,
21492151 #: break as separator, otherwise it uses comma as separator.
21502152 self .separator : Optional [str ] = separator
21512153 super ().__init__ (name , list , description , required , [])
2154+ def _check_value (self , value : List ) -> None :
2155+ super ()._check_value (value )
2156+ if value is not None :
2157+ i = 0
2158+ for item in value :
2159+ if item .__class__ is not self .item_type :
2160+ raise ValueError (f"List item[{ i } ] has wrong type" )
2161+ i += 1
21522162 def clear (self , * , to_default : bool = True ) -> None :
21532163 """Clears the option value.
21542164
21552165 Arguments:
21562166 to_default: If True, sets the option value to default value, else to None.
21572167 """
2158- self ._value = []
2168+ self ._value . clear ()
21592169 def get_formatted (self ) -> str :
21602170 """Returns value formatted for use in config file.
21612171 """
@@ -2207,13 +2217,10 @@ def set_value(self, value: List) -> None:
22072217 ValueError: When the argument is not a valid option value.
22082218 """
22092219 self ._check_value (value )
2210- if value is not None :
2211- i = 0
2212- for item in value :
2213- if item .__class__ is not self .item_type :
2214- raise ValueError (f"List item[{ i } ] has wrong type" )
2215- i += 1
2216- self ._value = value
2220+ if value is None :
2221+ self .clear ()
2222+ else :
2223+ self ._value = [i for i in value ]
22172224 def load_proto (self , proto : ConfigProto ) -> None :
22182225 """Deserialize value from `.ConfigProto` message.
22192226
0 commit comments