首页 > 解决方案 > Python 编程:类

问题描述

我刚开始学习 Python,想更好地理解类。这是我教科书中的两个例子,第一个我理解得很好,但是,我不明白第二个例子中“self”和“other”的用法。

有人可以用外行的方式为我分解代码,一步一步地向我解释发生了什么吗?我想完全掌握如何在类的方法中使用参数。将不胜感激任何帮助,我真的很想得到这个窍门!谢谢。

class Album(object):
    def __init__(self, name, player, year, tracks): 
        self.name = name
        self.player = player
        self.year = year
        self.tracks = tracks

    def num_years_ago(self, current_year):
        "Return the number of years since album was released"
        return current_year - self.year



from math import gcd

class Fraction(object):
    def __init__(self, num, denom):
        g = gcd(num, denom)
        self.num = num//g
        self.denom = denom//g

    def __add__(self, other):
        return Fraction(self.num * other.denom + self.denom * other.num, 
                       self.denom * other.denom)

    def __eq__(self, other):
        return self.num == other.num and self.denom == other.denom

标签: pythonfunctionclassobjectmethods

解决方案


好问题!我很高兴你伸出手来更好地理解它,而不是像我一开始那样随波逐流,哈哈!

你基本上可以把类想象成一个小机器人。机器人具有一些特定的特征,例如面部和世界统治计划(属性),并且机器人可以执行世界统治(功能)之类的事情。

如果我们把你的第一堂课想象成一个小机器人:

class Album(object):
    def __init__(self, name, player, year, tracks): 
        self.name = name
        self.player = player
        self.year = year
        self.tracks = tracks

    def num_years_ago(self, current_year):
        "Return the number of years since album was released"
        return current_year - self.year

我们的机器人的名字是Album。所以专辑有自我意识,它也知道它的名字,是谁制作的(“播放器”),制作的年份,以及某些曲目上的一些恶心节拍。机器人可以做一些数学运算,并告诉你它是多久以前制造的。

在 Pythonic 中,这意味着您可以通过使用 初始化 Album 对象来“构建”专辑Album()。但是,Album 需要了解有关他自己的信息!因此,您必须在该构造函数中包含一些参数。看起来像Album("Dirty Computer", "Janelle Monae", 2018, "Pynk")。(您不需要包含“self”,因为 Album 已经知道它是一个机器人!)

分解构造函数,因为你已经给 Album 一些关于它自己的东西,它需要真正内化它,所以你将 Album 的属性设置为你告诉它的那些。这就是self.name = name, self.player = player,self.year = yearself.tracks = tracks行的用途。

现在如果我问它“你在这个地球上多久了,Album?”,它可能会认为“比人类可以理解的还要长”,但它肯定会用num_years_ago函数来回答。要调用这个,因为你必须有一个机器人来问这个问题,它看起来像exampleRobot.num_years_ago(2019)。点运算符 ( .) 基本上是一种表示该num_years_ago函数是从机器人调用的方法。

在代码中,这可能看起来像

cindy = Album("Dirty Computer", "Janelle Monae", 2018, "Pynk")
age = cindy.num_years_ago(2019)
print(age)

希望这可以帮助!随时在评论中提出问题,我会澄清!


推荐阅读