[Python]在自己的方法中使用在类中(在__init__之前)定义的变量(__init__等)

时间:2015-08-17 02:01:29

标签: python list class methods global-variables

我试图制作一个可以放水果的篮子。篮子是一个名为 basket 的类,它有一个名为 contents 的内部列表。每次创建 basket fruit实例时,它的 self.name 属性都会附加到 contents 。无论如何,这不起作用。

Account.find_by_access_token

出于某种原因,它只有在我完全定义类外的列表内容时才有效,这可能会影响更大项目的顺序和调试。

有没有办法让这段代码工作,这让我可以在类中定义列表?好像要使它成为特定于类的"全局"变量,仅对类中的方法/变量有效。

注意:该课程应该是一个篮子!每种水果本身都称为篮子,但它们是水果。我希望他们都在一个篮子里面。

1 个答案:

答案 0 :(得分:-1)

这整个答案只是一个冗长的解释,说明为什么你不应该做你正在做的事情......

  

"注意:该课程应该是一个篮子!每种水果本身都称为篮子,但它们是水果。我希望他们都在一个篮子里。"

在尝试解决这个谜语之前,你的实际问题必须放在透视中。

  • 您正在处理两个名词 - Fruit Basket
  • 他们有关联关系:他们是独立的,但相关。
  

"每种水果都被称为篮子"

资金错误!这就像棋盘和棋子。一个人不能简单地成为另一个人。

  

"我希望他们都在一个篮子里。"

如果通过" all"你的意思是"所有的水果"然后就可以做到。

要将内容放入透视图中,首先修改类名称,如下所示:

class Fruit(object):
    def __init__(self, name):
        self.name = name

现在必须有另一个名为Basket的对象来跟踪所有结果。这不一定是另一类。您可以简单地制作字典,集,列表或任何其他容器。

basket = set()

是一个非常简单的集合,可以容纳所有的成果。每次制作水果时,您都可以自动将其名称添加到购物篮中:

basket = set()


class Fruit(object):
    def __init__(self, name):
        self.name = name
        # This is all that is needed!
        basket.add(name)

测试此代码:

# Making some fruits
for name in ["Apple", "Orange", "Banana"]:
    Fruit(name)

# Checking the basket
print(basket)

输出如下:

{'Banana', 'Apple', 'Orange'}

现在,如果要为basket对象添加更多功能,可以按如下方式进入类:

class Basket(object):
    def __init__(self, fruits=None):
        self.fruits = fruits or set()

    def put(self, fruit):
        """Add a fruit to this basket."""
        self.fruits.add(fruit)

    def show(self):
        """Display all the fruits in this basket."""
        for fruit in self.fruits:
            print(fruit.name) 


class Fruit(object):
    def __init__(self, name, basket=None):
        self.name = name

        # Adding it to the basket if needed.
        if basket is not None:
            basket.put(self)



# Making two baskets
gift = Basket()
picnic = Basket()

# Making some fruits and adding them to both baskets
apple = Fruit("Apple", basket=gift)
orange = Fruit("Orange", basket=picnic)
banana = Fruit("Banana", basket=gift)

print("In your gift basket you have:")
gift.show()
print("In your picnic basket you have:")
picnic.show()

这是输出:

In your gift basket you have:
Banana
Apple
In your picnic basket you have:
Orange