[英]How to return objects from methods in Python?
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.使用适当的方法和属性创建一个
Order
类。 After that you'll be able to return an instance of this class from PizzaHut.order()
method.之后,您将能够从
PizzaHut.order()
方法返回此类的实例。
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()
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这是如何从方法返回 object
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
you can use Namedtuplesin in python.您可以在 python 中使用 Namedtuplesin。
# 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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.