繁体   English   中英

Python Class 对象/属性

[英]Python Class Objects/Attributes

我正在通过在线课程学习 python 并且做得很好,我偶然发现并发出了问题。 通常,当遇到问题时,我只是谷歌查找答案或查找指南,但这里的问题是我什至不确定我在寻找什么!

我目前有以下代码。 我的任务是让每个锻炼强度都有一个特定的值,例如 Low = 3、Medium = 6 和 High = 12。然后我可以通过持续时间找到燃烧的卡路里 * 这些值取决于传递给 class 的强度和持续时间.

我不知道如何为 class 方法赋值? 我尝试了列表和字典,两者都抛出错误。 我尝试编写 if 语句来尝试 if self.intensity(getattr) = "Low": Then x = 3 等。

我真的不知道从哪里开始找到答案,因此问你们。

目前的代码是(我知道缺少部分我目前只专注于为强度分配值

class ExerciseSession:
def __init__(self, exercise, intensity, duration):
    self.exercise = exercise
    self.intensity = intensity
    self.duration = duration

def get_exercise(self):
    return self.exercise

def get_intensity(self):
    return self.intensity

def get_duration(self):
    return self.duration + " minutes"

def set_exercise(self, excersice):
    self.set_exercise = exercise

def set_intensity(self, intensity):
    self.set_intensity = intensity

def set_duration(self, duration):
    self.set_duration = duration   

new_exercise = ExerciseSession("Running", "Low", 60)
print(new_exercise.get_exercise())
print(new_exercise.get_exercise())
print(new_exercise.get_intensity())
print(new_exercise.get_duration())
new_exercise.set_exercise("Swimming")
new_exercise.set_intensity("High")
new_exercise.set_duration(30)
print(new_exercise.get_exercise())
print(new_exercise.get_intensity())
print(new_exercise.get_duration())
print(new_exercise.get_intensity())
print(new_exercise.get_duration())
new_exercise.set_exercise("Swimming")
new_exercise.set_intensity("High")
new_exercise.set_duration(30)
print(new_exercise.get_exercise())
print(new_exercise.get_intensity())
print(new_exercise.get_duration())

我只是在 class 中做错了列表/字典,还是我在这里遗漏了一些非常容易的东西。 我了解类和方法,但在 class 等内部时,似乎有些事情略有不同。

首先-您的二传手是否按照您的问题实施? 如果是这样,您似乎正试图用一个值覆盖您的方法。 set_exercise() 中还有一个小错字。 将以下内容与您的问题进行比较:

def set_exercise(self, exercise):
    self.exercise = exercise

def set_intensity(self, intensity):
    self.intensity = intensity

def set_duration(self, duration):
    self.duration = duration   

然后,您可以在 class 之外编写测试语句,以确定在根据强度计算消耗的卡路里数量时要使用的值。


或者,Python 提供了一种简洁的方式来封装数据,而无需通过 @property 装饰器使用 getter/setter 方法。 然后可以以简单的方式设置和检索该属性。 这在属性派生自其他属性的更复杂情况下特别有用,这意味着您将始终访问最新的属性。 此处对此进行了更详细的介绍: Python 中的“公共”或“私有”属性? 什么是最好的方法?

class ExerciseSession:
    def __init___(self, exercise, intensity, duration):
        self._exercise = exercise
        self._intensity = intensity
        self._duration = duration

    @property
    def exercise(self):
        return self._exercise

    @property
    def intensity(self):
        if self._intensity == "Low":
            out = 3
        elif self._intensity == "Medium":
            out = 6
        elif self._intensity == "High":
            out = 12
        else:
            out = None

        return out

    @property
    def duration(self):
        return self._duration

注意:每个实例属性之前的“_”用于指示内部属性通常是私有的。

然后可以按如下方式访问这些属性(注意我们不必调用任何方法,例如 new_exercise.exercise()):

new_exercise = ExerciseSession("Running", "Low", 60)
print(new_exercise.exercise)
print(new_exercise.intensity)
print("{} minutes.".format(new_exercise.duration))

如果您需要能够在 object 上更新运动/持续时间/强度的类型,而不仅仅是创建一个新的,您可以使用 @.setter 装饰器添加 setter 方法,例如:

@exercise.setter
def exercise(self, value):
    self._exercise = value

这些属性可以更新为:

new_exercise.exercise = "Swimming"

做同样的事情:-)

def calories_burned(self):
    if self.intensity == "Low":
        return 4 * self.duration
    elif self.intensity == "Medium":
        return 8 * self.duration
    else:
        return 12 * self.duration
    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM