首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python类对象/属性

Python类对象/属性
EN

Stack Overflow用户
提问于 2020-04-19 21:27:49
回答 2查看 73关注 0票数 0

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

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

我不知道的是如何给类方法赋值?我尝试过lists和Dictionarys,它们都抛出了错误。我尝试编写和If语句来尝试if self.intensity(getattr) = "Low":Then x= 3等。

我真的不知道从哪里开始寻找答案,所以我问你们。

目前的代码是(我意识到缺少一些片段,我目前只专注于为强度赋值

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

我只是在一个类中做错了列表/字典,还是我在这里遗漏了一些非常简单的东西。我理解类和方法,但似乎在类内部的工作方式略有不同,等等。

EN

回答 2

Stack Overflow用户

发布于 2020-04-19 22:12:21

首先--你的setter是按照你的问题实现的吗?如果是这样,您似乎正在尝试用值覆盖您的方法。在set_exercise()中也有一个小的拼写错误。将以下内容与您的问题进行比较:

代码语言:javascript
复制
def set_exercise(self, exercise):
    self.exercise = exercise

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

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

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

或者,Python提供了一种整洁的方式来封装数据,而无需通过@property装饰器求助于getter/setter方法。然后,可以以简单的方式设置和检索该属性。这在更复杂的情况下特别有用,其中属性派生自其他属性,这意味着您将始终访问最新的属性。这里详细介绍了这一点:"public" or "private" attribute in Python ? What is the best way?

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

代码语言:javascript
复制
new_exercise = ExerciseSession("Running", "Low", 60)
print(new_exercise.exercise)
print(new_exercise.intensity)
print("{} minutes.".format(new_exercise.duration))

代码语言:javascript
复制
@exercise.setter
def exercise(self, value):
    self._exercise = value

这些属性可以更新为:

代码语言:javascript
复制
new_exercise.exercise = "Swimming"
票数 1
EN

Stack Overflow用户

发布于 2021-08-12 21:44:15

做同样的事情:-)

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61305105

复制
相关文章

相似问题

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