这段代码是否意味着一个类和方法的关系?"

时间:2014-10-26 04:43:33

标签: python class methods

我在exercism.io练习,我不了解其中一个练习。我的任务是编写一个将在运行时导入的小模块。

以下代码是练习的一部分,测试文件中未定义Allergiesis_allergic_to。我可以在我的模块中定义它们。

def test_has_the_right_allergies(self):
    allergies = Allergies(5)
    self.assertTrue(allergies.is_allergic_to('eggs'))
  1. 我真的不是在寻找一个解决方案,就像一个优秀的程序员看到的简单指导一样,以及我是否应该用类和方法来解决方案,或只是两个具有"方法功能的功能"对象(无论可能是什么)。

  2. 作为一个业余爱好者程序员,我无法理解语法。我将is_allergic_to视为一种方法,但我不知道调用Allergies()时返回的对象类型本质上,代码是否意味着我创建了一个类{{1}有方法Allergies

1 个答案:

答案 0 :(得分:1)

在Python中,类中的方法与普通方法没有什么不同,除了以下两种方式:

  1. 它们被命名为该类。这意味着您必须首先引用该课程,然后才能看到"或者致电方法。

  2. 它们自动作为第一个参数传递实例(或类)。第一个参数通常称为 self ,但可以命名为其他任何参数。如果方法需要处理类本身而不是实例,也可以省略它。

  3. 所以"方法能够对象"它只是一个在类中定义的方法,它将实例作为第一个参数:

    class Foo(object):
       def some_method(self, a, b):
          self.foo = a
          self.bar = b
          return a+b
    
    obj = Foo()
    result = obj.some_method(1, 3) # `obj` is passed in as the instance (ie, self)
    print(result) # This will print 4
    print(obj.foo) # 1
    print(obj.bar) # 3
    

    您也可以显式调用该方法并传入实例的引用,因为它只是一个普通的方法:

    result = Foo.some_method(obj, 1, 3)  # Not encouraged
    

    在您的示例中,is_allergic_to返回的对象可以返回" true"或" falsey"表达式(或值),这是assertTrue所期望的:

    assertTrue(expr, msg=None)
    assertFalse(expr, msg=None)
    
    Test that expr is true (or false).
    

    编写该方法的一种可能方法是:

    class Allergies(object):
       # other methods here
    
       def __init__(self, name):
          self.allergies = []  # an empty list, to store allergies
          self.name = name
    
       def add_allergy(self, allergy):
          self.allergies.append(allergy)
    
       def is_allergic_to(self, allergy):
          return allergy in self.allergies