简体   繁体   English

如何从 Python 中的方法返回对象?

[英]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()

http://repl.it/WWB http://repl.it/WWB

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM