Dec-07-2017, 02:31 AM
Suppose I've got the following class to represent a Car and Tire
If I had GUI with fields for each Car attribute, so calling the
This:
class Tire:
def __init__(self, id, name, type):
self.id = id
self.name = name
self.type = type
@property
def getID(self):
return self.id
@property
def getName(self):
return self.name
@property
def getType(self):
return self.Type
def __str__(self):
return "ID: {0} Name: {1} Type: {2}".format(self.id, self.name, self.type)class Car:
def __init__(self, ID, name, tire, engine):
self.ID = ID
self.name = name
self.tire = tire
self.engine = engine
@property
def getID(self):
return self.ID
@property
def getName(self):
return self.name
@property
def getTire(self):
return self.tire
@property
def getEngine(self):
return self.engine
def __str__(self):
return "ID: {0} Name:{1} Tire: {2} Engine: {3}".format(self.ID, self.name, self.tire, self.engine)Suppose I want to follow OOP principals, given that Tire is an attribute of a Car, how would I return the details of my Tire object? If I had GUI with fields for each Car attribute, so calling the
__str__ is not applicable, I would need to use my getters, would providing a getter for Tire be appropriate or should I expose the tire attributes in Car? or to put it in code:This:
class Car:
def __init__(self, ID, name, tire, engine):
self.ID = ID
self.name = name
self.tire = tire
self.engine = engine
@property
def getID(self):
return self.ID
@property
def getName(self):
return self.name
@property
def getTire(self):
return self.tire
@property
def getEngine(self):
return self.engine
@property
def getTire(self):
return self.tire
def __str__(self):
return "ID: {0} Name:{1} Tire: {2} Engine: {3}".format(self.ID, self.name, self.tire, self.engine)Or:class Car:
def __init__(self, ID, name, tire, engine):
self.ID = ID
self.name = name
self.tire = tire
self.engine = engine
@property
def getID(self):
return self.ID
@property
def getName(self):
return self.name
@property
def getTire(self):
return self.tire
@property
def getEngine(self):
return self.engine
@property
def getTireID(self):
return self.tire.getID
@property
def getTireName(self):
return self.tire.getName
@property
def getTireType(self):
return self.tire.getType
def __str__(self):
return "ID: {0} Name:{1} Tire: {2} Engine: {3}".format(self.ID, self.name, self.tire, self.engine)In the real world, I can open the hood of my car and see all the details I want, the engine, the tires, etc.. I can even get the ID, and Google it if I wanted too. So the second approach seems approiate, but if I update my Tire class with an attribute that the customer/buyer should know about then that means I need to update car as well. I like the first option, but I'm unsure. What is the appropriate(OOP) way to handle this?
