用作" self"争论?

时间:2018-04-08 22:11:28

标签: python python-3.x oop methods

我正在通过一本书学习Python,其中一个问题是创建一个名为Country的类,其中包含如下所示的参数,然后创建一个名为is_larger的方法,该方法将返回一个布尔值,指示是否考虑到这个代码,第一个国家的面积比另一个国家大:

>>> canada = Country( 'Canada', 34482779, 9984670)
>>> usa = Country( 'United States of America' , 313914040, 9826675)
>>> canada. is_larger(usa)
True

以下是本书的解决方案:

class Country():

    def __init__(self, name, population, area):
        """ (Country, str, int, int)

        A new Country named name with population people and area area.

        >>> canada = Country('Canada', 34482779, 9984670)
        >>> canada.name
        'Canada'
        >>> canada.population
        34482779
        >>> canada.area
        9984670
        """ 

        self.name = name
        self.population = population
        self.area = area

    def is_larger(self, other):
        """ (Country, Country) -> bool

        Return whether this country is larger than other.

        >>> canada = Country('Canada', 34482779, 9984670)
        >>> usa = Country('United States of America', 313914040, 9826675)
        >>> canada.is_larger(usa)
        True
        >>> usa.is_larger(canada)
        False
        """ 

        return self.area > other.area

我可以在看到答案后申请,但我不理解这个过程,而且我非常希望完全理解这些代码。 方法is_larger包含两个参数,一个是 self 。该方法不应该是:

def is_larger(self, country1, country2):

如何将对象用作 self 参数?

如果我的问题令人困惑,请告诉我,我会尝试澄清我头脑中发生的事情。

1 个答案:

答案 0 :(得分:2)

电话

canada.is_larger(usa)

可以被认为是

的语法糖
Country.is_larger(canada, usa)

参数self(实际上,该方法的第一个参数,无论您的名称是什么)都是指调用方法的对象。在这里,无论您使用的是第一种表单还是第二种表单self == canadaother == usa