Python编程:类

2024-04-20 13:07:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始学习Python,想更好地理解类。 我的课本里有两个例子,第一个我理解得很好,但是第二个例子中我不理解“自我”和“他者”的用法。你知道吗

有没有人能用外行的语言,一步一步地给我解释一下代码的来龙去脉?我想完全掌握如何在类的方法中使用参数。如果有任何帮助我都会很感激的,我真的很想掌握这个窍门!谢谢。你知道吗

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

Tags: nameselfreturnobjectinitdefyearnum
2条回答

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

你基本上可以把类想象成一个小机器人。机器人有一些特定的特征,比如脸和世界控制计划(属性),机器人可以做一些事情,比如世界控制(功能)。你知道吗

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

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("Dirty Computer", "Janelle Monae", 2018, "Pynk")。(你不需要包含“self”,因为相册已经知道它是机器人了!)你知道吗

为了分解构造器,既然你已经给了Album一些关于它自己的知识,它就需要真正的内在化,所以你把Album的属性设置为你告诉它的属性。这就是self.name = nameself.player = playerself.year = yearself.tracks = tracks行的用途。你知道吗

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

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

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

希望这有帮助!请随意在评论中提出问题,我会澄清的!你知道吗

__add____eq__是运算符。 这个想法只是通过经典的python操作符来操作您的实例。你知道吗

__add__使您能够对a和b两个Fraction实例执行a + b__eq__使您能够比较两个分数,如

a= Fraction(3,4)
b= Fraction(5,7)

if a==b:
  return "OMG it equal"

相关问题 更多 >