首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python编程:类

Python编程:类
EN

Stack Overflow用户
提问于 2019-07-03 15:50:46
回答 2查看 55关注 0票数 1

我刚刚开始学习Python,希望能更好地理解类。这里有两个例子,在我的教科书中,第一个我非常理解,但是,我不理解在第二个例子中“自我”和“其他”的用法。

有人能把我的代码按门外汉的术语一步步地分解,并向我解释一下发生了什么事吗?我想充分掌握如何在类的方法中使用参数。如果有任何帮助的话,我真的很想掌握这个窍门!谢谢。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-03 16:21:33

问得好!我很兴奋,你是为了更好地理解它,而不是像我在一开始那样漂浮在一起,哈哈!

你基本上可以把课堂想象成一个小机器人。机器人具有人脸和世界控制计划(属性)等特定特征,机器人可以实现世界控制(功能)等功能。

如果我们像一个小机器人一样想到你的第一堂课:

代码语言:javascript
复制
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 this中,这意味着您可以通过使用Album()初始化相册对象来“构建”相册。然而,专辑需要了解自己的东西!所以你必须在构造函数中包含一些参数。那看起来像Album("Dirty Computer", "Janelle Monae", 2018, "Pynk")。(你不需要包含"self“,因为专辑已经知道它是机器人了!)

为了分解构造函数,因为您已经给了相册一些东西来了解它本身,它需要真正地内化它,所以您将专辑的属性设置为您告诉它的属性。这就是self.name = nameself.player = playerself.year = yearself.tracks = tracks行的作用所在。

现在,如果我问它“你在这个地球上多久了,专辑?”,它可能会认为“超过人类所能理解的时间”,但它肯定会用num_years_ago函数回答。要称之为这个,因为你必须有一个机器人来问这个问题,它看起来像exampleRobot.num_years_ago(2019)。点算子(.)基本上是表示机器人调用num_years_ago函数的一种方式。

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

代码语言:javascript
复制
cindy = Album("Dirty Computer", "Janelle Monae", 2018, "Pynk")
age = cindy.num_years_ago(2019)
print(age)

希望这能有所帮助!请随意删除评论中的问题,我会澄清的!

票数 1
EN

Stack Overflow用户

发布于 2019-07-03 16:10:40

__add____eq__ _是运算符。这样做的目的只是通过经典的python操作符来操作您的实例。

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

代码语言:javascript
复制
a= Fraction(3,4)
b= Fraction(5,7)

if a==b:
  return "OMG it equal"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56873893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档