Can anyone describe how to return objects from a method on which further methods and attributes can be accessed?
Example:
pizza = PizzaHut()
order = pizza.order()
print order.order_number
order.cancel()
Can anyone describe how to return objects from a method on which further methods and attributes can be accessed?
Example:
pizza = PizzaHut()
order = pizza.order()
print order.order_number
order.cancel()
Create an Order
class with appropriate methods and properties. After that, you'll be able to return an instance of this class from PizzaHut.order()
method.
class Order(object):
def __init__(self, number, amount):
self.number = number
self.amount = amount
print self
def __str__(self):
return "Order #%s: amount = %s" % (self.number, self.amount)
@property
def order_number(self):
return self.number
def cancel(self):
self.amount = 0
print "Order is cancelled."
print self
class PizzaHut(object):
def __init__(self, price):
self.price = price
def order(self):
return Order(42, self.price)
pizza = PizzaHut(4.99)
order = pizza.order()
print order.order_number
order.cancel()
Python 3 version
class Order:
def __init__(self, number, amount):
self.number = number
self.amount = amount
print(self)
def __str__(self):
return f'Order #{self.number}: amount = {self.amount}'
@property
def order_number(self):
return self.number
def cancel(self):
self.amount = 0
print('Order is cancelled.')
print(self)
class PizzaHut:
def __init__(self, price):
self.price = price
def order(self):
return Order(42, self.price)
pizza = PizzaHut(4.99)
order = pizza.order()
print(order.order_number)
order.cancel()
you can use Namedtuplesin in python.
# Using namedtuple is way shorter than
# defining a class manually:
>>> from collections import namedtuple
>>> Car = namedtuple('Car', 'color mileage')
# Our new "Car" class works as expected:
>>> my_car = Car('red', 3812.4)
>>> my_car.color
'red'
>>> my_car.mileage
3812.4
# We get a nice string repr for free:
>>> my_car
Car(color='red' , mileage=3812.4)
# Like tuples, namedtuples are immutable:
>>> my_car.color = 'blue'
AttributeError: "can't set attribute"
class Foo():
def f(self):
print "Foo.f called"
class Bar():
def b(self):
return Foo()
bar = Bar()
bar.b().f() # prints "Foo.f called"
class Order:
def __init__(self, number):
self.order_number = number
class PizzaHut:
def __init__(self):
self.order = Order(1234)
def order(self):
return self.order
This is how to return back the object from a method
class Order(object):
def __init__(self, number, amount):
self.number = number
self.amount = amount
def cancel(self):
self.amount = 0
return self #here you return back the object