python - 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
解决方案
好问题!我很高兴你伸出手来更好地理解它,而不是像我一开始那样随波逐流,哈哈!
你基本上可以把类想象成一个小机器人。机器人具有一些特定的特征,例如面部和世界统治计划(属性),并且机器人可以执行世界统治(功能)之类的事情。
如果我们把你的第一堂课想象成一个小机器人:
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 = year
和self.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)
希望这可以帮助!随时在评论中提出问题,我会澄清!
推荐阅读
- salesforce - Salesforce:根据文本列表评估潜在客户字段的复选框
- javascript - 解构对象反应来自firebase的本机钩子返回未定义
- json - How to access JSON object key and value in ReactJS
- apache-kafka - 为什么kafka消费者消费进程3次后不消费?
- azure - Azure 自动化/o365 Exchange 连接拒绝访问
- ms-access - 从 MS Access 升级到 SQL Server 后多值字段消失
- amazon-web-services - 无法 Ping 同一安全组下的 EC2 实例
- clojure - 从向量向量中获取字符串值
- java - Apache poi, cells missing when loading
- pine-script - 如何找到第二高的酒吧?