Я хочу создать класс, содержащий 2 необязательных атрибута, но имеющих как минимум 1. Я пробовал следующее, но это не разрешено attr, и это не гарантирует наличие хотя бы одного из них.
@attr.s
class myClass():
attrA = attr.ib(default=None, validator=optional(instance_of(int)))
attrB = attr.ib(default=None, validator=optional(instance_of(int)))
# Desired behaviour
>>> a = myClass(attrA=1)
>>> a.attrA
1
>>> a.attrB
None
>>> a = myClass(attrB=2)
>>> a.attrA
None
>>> a.attrB
1






Я не совсем уверен, что пытается сделать показанный вами код, но в любом случае можно добиться того, о чем вы просите, используя собственный метод инициализации, а не декоратор attr.s:
class Myclass:
def __init__(self, attrA=None, attrB=None):
if not (attrA or attrB):
raise ValueError('one of the attributes must be provided')
self.attrA = attrA
self.attrB = attrB