【问题标题】:Using classes to print out instance attributes based on user input in Python在 Python 中使用类根据用户输入打印出实例属性
【发布时间】:2020-02-19 18:18:20
【问题描述】:

我是编程新手,想通过使用 Python 创建一个小应用来练习。 应用要求用户输入一个级别和一个学期,应用将返回该级别和学期的课程。

我之前尝试过不使用课程而只使用嵌套字典,但由于某些课程的课程不同,它很快就变得非常混乱。

如何检查用户输入是否在实例内,然后返回其中包含的实例属性?

谢谢!

class PacketClasses:

    def __init__(self, level, term, song, story, act1, act2):
        self.level = level
        self.term = term
        self.song = song
        self.story = story
        self.act1 = act1
        self.ac2 = act2


class HeadWayClasses:

    def __init__(self, level, term, song, review, expression, gs):
        self.level = level
        self.term = term
        self.song = song
        self.review = review
        self.expression = expression
        self.gs = gs


p1 = Packet("Pink", 1, "heads shoulders knees and toes", "The giant grass-hopper", "bowling", "craft")
p2 = Packet("Pink", 2, "ABC song", "The giant grass-hopper part 2", "shopping", "craft")
g1 = Packet("Green", 1, "ABC song", "Snow White", "Animals", "craft")
g2 = Packet("Green", 2, "ABC song", "Snow White part 2", "At the zoo", "craft")

o1 = HeadWay("Orange", 1, "song 1", "review 1", "expression 1", "gs 1")
o2 = HeadWay("Orange", 2, "song 2", "review 2", "expression 2", "gs 2")
a1 = HeadWay("Aqua", 2, "song 1", "review 1", "expression 1", "gs 1")
a2 = HeadWay("Aqua", 2, "song 2", "review 2", "expression 2", "gs 2")

users_level = input("Please enter the level you wish to check: ")
users_term = int(input("Please enter the term level you wish to check: "))

# if users_level & users_term in a class, print the curriculum

【问题讨论】:

    标签: python python-3.x function class attributes


    【解决方案1】:

    这是继承和面向对象编程如何真正帮助您的经典示例。我们将创建一个父类Classes 并对其进行扩展。这样会减少很多代码。

    class Classes:
    
        def __init__(self, level, term, song):
            self.level = level
            self.term = term
            self.song = song
    

    现在,我们将使用您已有的类对其进行扩展:

    class Packet(Classes):
    
        def __init__(self, level, term, song, story, act1, act2):
            super().__init__(level, term, song)
            self.story = story
            self.act1 = act1
            self.ac2 = act2
    
    
    class HeadWay(Classes):
    
        def __init__(self, level, term, song, review, expression, gs):
            super().__init__(level, term, song)
            self.review = review
            self.expression = expression
            self.gs = gs
    

    没有太大变化,但现在您可以确定,无论何时交替使用 PacketClasses 或 HeadWayClasses,它们都将始终具有关卡、术语和歌曲。

    现在只需在类中搜索级别和术语即可。对于非常大量的数据,您实际上想要使用真实的数据库。但是,对于这样的小数据,简单地循环就足够了。

    将类放入数组中:

    classes = [
        Packet("Pink", 1, "heads shoulders knees and toes", "The giant grass-hopper", "bowling", "craft"),
        Packet("Pink", 2, "ABC song", "The giant grass-hopper part 2", "shopping", "craft"),
        Packet("Green", 1, "ABC song", "Snow White", "Animals", "craft"),
        Packet("Green", 2, "ABC song", "Snow White part 2", "At the zoo", "craft"),
        HeadWay("Orange", 1, "song 1", "review 1", "expression 1", "gs 1"),
        HeadWay("Orange", 2, "song 2", "review 2", "expression 2", "gs 2"),
        HeadWay("Aqua", 2, "song 1", "review 1", "expression 1", "gs 1"),
        HeadWay("Aqua", 2, "song 2", "review 2", "expression 2", "gs 2")
    ]
    

    现在我们可以遍历它们了。让我们把逻辑放到一个小函数中:

    def findByLevelAndTerm(classes, level, term):
        for c in classes:
            if c.level == level and c.term == term:
                return c
        return None
    

    我们完成了!现在您可以按级别和术语搜索课程:

    users_level = input("Please enter the level you wish to check: ")
    users_term = int(input("Please enter the term you wish to check: "))
    found_class = findByLevelAndTerm( classes, users_level, users_term )
    if found_class is None: print("Unable to find the class!")
    

    请务必注意,findByLevelAndTerm() 将仅返回第一个结果。如果存在多个,您可能希望它返回一个列表。

    【讨论】:

    • 迈克尔,非常感谢您抽出宝贵时间。这是非常有用的信息,我非常感谢!我目前正在学习 Python 课程,接下来是 OOPS 部分,我很高兴能了解更多关于继承和 OOPS 方法的知识:)
    猜你喜欢
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多