Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Setter:
- def __init__(self, parent, current=0, prefixes=()):
- self.parent = parent
- self.prefixes = prefixes
- def __getattr__(self, attribute: str):
- self.prefixes += (attribute,)
- if self.prefixes[self.current] == 'is_a':
- setattr(self.parent, 'is_a_' + 'attribute', True)
- elif self.prefixes[self.current] == 'is_not_a':
- setattr(self.parent, 'is_a_' + 'attribute', False)
- elif self.prefixes[self.current] == 'is_the':
- return Setter(self.parent, self.current + 1, self.prefixes)
- elif self.prefixes[self.current - 1] == 'is_the':
- return Setter(self, parent, self.current + 1, self.prefixes)
- elif self.prefixes[self.current - 2] == 'is_the':
- setattr(self.parent, self.prefixes[self.current - 1], self.prefixes[self.current])
- class Thing:
- def __init__(self, name):
- self.name = name
- def __getattr__(self, prefix: str) -> Setter:
- return Setter(self, 0, (prefix,))
- jane = Thing('Jane')
- assert jane.name == 'Jane'
- jane.is_a.person
- jane.is_a.woman
- jane.is_not_a.man
- assert jane.is_a_person
- assert jane.is_a_woman
- assert not jane.is_a_man
- jane.is_the.parent_of.joe
- assert jane.parent_of == 'joe'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement