我在exercism.io练习,我不了解其中一个练习。我的任务是编写一个将在运行时导入的小模块。
以下代码是练习的一部分,测试文件中未定义Allergies
或is_allergic_to
。我可以在我的模块中定义它们。
def test_has_the_right_allergies(self):
allergies = Allergies(5)
self.assertTrue(allergies.is_allergic_to('eggs'))
我真的不是在寻找一个解决方案,就像一个优秀的程序员看到的简单指导一样,以及我是否应该用类和方法来解决方案,或只是两个具有"方法功能的功能"对象(无论可能是什么)。
作为一个业余爱好者程序员,我无法理解语法。我将is_allergic_to
视为一种方法,但我不知道调用Allergies()
时返回的对象类型本质上,代码是否意味着我创建了一个类{{1}有方法Allergies
?
答案 0 :(得分:1)
在Python中,类中的方法与普通方法没有什么不同,除了以下两种方式:
它们被命名为该类。这意味着您必须首先引用该课程,然后才能看到"或者致电方法。
它们自动作为第一个参数传递实例(或类)。第一个参数通常称为 self ,但可以命名为其他任何参数。如果方法需要处理类本身而不是实例,也可以省略它。
所以"方法能够对象"它只是一个在类中定义的方法,它将实例作为第一个参数:
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