New to Python and oop - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: New to Python and oop (/thread-17607.html) |
New to Python and oop - SpongeBob - Apr-17-2019 I am attempting to write a Python object-oriented program to control the state of three relays. My partial solution isn't eloquent. Can you please show me how to duplicate the below code using proper oop code? Thank you in advance. Bob # relay1 = is controlled via pin 37 # relay2 = is controlled via pin 38 # relay3 = is controlled via pin 40 class Relays: def __init__(self, relay_num, relay_state): self.relay_num = relay_num # relay1, relay2 or relay3 self.relay_state = relay_state # 1 = on, 2 = off relay1 = Relays(1, 0) relay2 = Relays(2, 1) relay3 = Relays(3, 1) print(relay1.relay_num) print(relay1.relay_state) print('-----') print(relay2.relay_num) print(relay2.relay_state) print('-----') print(relay3.relay_num) print(relay3.relay_state) print('-----') RE: New to Python and oop - Yoriz - Apr-17-2019 You can remove the duplicated code # relay1 = is controlled via pin 37 # relay2 = is controlled via pin 38 # relay3 = is controlled via pin 40 class Relays: def __init__(self, relay_num, relay_state): self.relay_num = relay_num # relay1, relay2 or relay3 self.relay_state = relay_state # 1 = on, 2 = off relay1 = Relays(1, 0) relay2 = Relays(2, 1) relay3 = Relays(3, 1) for relay in (relay1, relay2, relay3): print(relay.relay_num) print(relay.relay_state) print('-----') RE: New to Python and oop - SpongeBob - Apr-17-2019 Thank you! In a perfect opp world, should each relay be a method of class Relay? Perhaps, I asked the wrong question. How should one model a three relay system using oop techniques? RE: New to Python and oop - Yoriz - Apr-17-2019 No each relay should not be a method of its self. Methods in relay will do something with their own instance of relay. Define a three relay system
RE: New to Python and oop - SpongeBob - Apr-17-2019 A three relay system as defined in my original post. RE: New to Python and oop - Yoriz - Apr-17-2019 The original post is just creating 3 instances of relay and outputting their attributes, i don't see any sign of a system or what you are referring to when you say system. RE: New to Python and oop - SpongeBob - Apr-17-2019 Understood. Thank you again for your assistance. RE: New to Python and oop - buran - Apr-18-2019 I would say your current class is actually the system. So from OOP perspective I would say you need a class for the relay and a class for the system (i.e. some changes to your current class). Very basic example - i.e. a lot can be changed, improved, made differently, you can add extra helper attributes, etc. class Relay: def __init__(self, relay_id=None, state=False): self.id = relay_id self.state = state def toggle(self): self.state = not self.state class RelaySystem: def __init__(self, num_relays=0): self.relays = tuple(Relay(relay_id=f'{rel_id}') for rel_id in range(num_relays)) def set_all(self, state=False): for relay in self.relays: relay.state = state def print_report(self): print(f'Relay system with {len(self.relays)} relays.') for relay in self.relays: print(f"Relay id={relay.id} is {'ON' if relay.state else 'OFF'}") print() if __name__ == '__main__': relay_board = RelaySystem(3) relay_board.relays[0].state=True relay_board.print_report() relay_board.set_all(True) relay_board.print_report() relay_board.relays[2].toggle() relay_board.print_report()
RE: New to Python and oop - SpongeBob - Apr-28-2019 Thank you Buran! |