python - 在 Python 中使用类根据用户输入打印出实例属性

标签 python python-3.x function class attributes

我是编程新手,想通过使用 Python 创建一个小型应用程序来练习。 该应用程序要求用户输入级别和术语,应用程序将返回该级别和术语的类(class)表。

我之前曾尝试过不使用类而仅使用嵌套字典,但它很快就变得非常困惑,因为有些类有不同的类(class)。

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

谢谢!

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

最佳答案

这是继承和面向对象编程如何真正帮助您的经典示例。我们将创建一个父类 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,它们始终都会有一个级别、术语和歌曲。

现在只需在类(class)中搜索级别和术语即可。对于大量数据,您实际上需要使用真正的数据库。然而,对于像这样的小数据,简单的循环就足够了。

将类放入数组中:

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

我们就完成了!现在您可以按级别和术语搜索类(class):

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 - 在 Python 中使用类根据用户输入打印出实例属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60306821/

相关文章:

python - PyQt4 嵌套类 - "RuntimeError: underlying C/C++ object has been deleted"

python-3.x - 通过递归方式反向双向链表不在python中迭代

python - 如何从 python 列表中删除转义字符 (\)?

SQL - STUFF 函数中的 CASE WHEN 作为条件分隔符

c - 在函数中操作多维数组

python - 释放从 cffi 中的 c 函数传回的字符串的规范方法?

c# - 与 Python 中的 C# matchObject.Value 等效吗?

javascript - python 中的等效代码(时间)

python - python中函数参数列表中的*代表什么?

function - 发出带有参数的调用处理程序函数