如何创建和访问动态变量名称的模板函数?

问题描述 投票:0回答:1

我在代码中总结出三个极其相似的功能,分别针对他们的出生年月日分别输入用户。即使代码非常基础,我仍想使用最佳实践,这就是为什么它有点过大的原因。因此,现在我有一个充当模板的函数,并接受三个args dateType,typeStr和typeFormat。我正在尝试使用这些args在将使用模板创建的三个函数中命名变量,以便以后可以打印出该人的生日。我知道范围,但是我尝试将其设置为全局等,但是它没有用。我不知道我是否要创建持久性变量,或者一旦函数完成,所有变量是否都未赋值,并且如果我创建变量,我就无法弄清它们的名称,因为我尝试了所有可能性。

def makeTemplateInput(dateType, typeStr, typeFormat):
    def templateInput(dateType, typeStr, typeFormat):
        print('You\'re using the template function. Please input your birth {} in the format {}.\n$ '.format(dateType, typeFormat), end='')
        while True:
            try:
                dateType = input()
                typeStr = dateType
                dateType = int(dateType)

                if dateType > 0:
                    if len(typeStr) != len(typeFormat) and isinstance(dateType, int):
                        print('Your input doesn\'t have {} digits, please use the format {}.\n$ '.format(str(len(typeFormat)), typeFormat), end='')
                        print('strlen: ' + str(len(typeStr)))
                        continue
                    break
                else:
                    print('Your input is not a positive integer!\n$ ', end='')
                    continue

            except ValueError:
                print('Your input is not a valid number, please use the format {} where {} is an integer.\n$ '.format(typeFormat, str(typeFormat[:1])), end='')

        print(dateType)



def yearInput1():
    makeTemplateInput('year', 'yearStr', 'YYYY')

yearInput1()

print('Your birthdate is: {}/{}/{}'.format(yearInput1.year, monthInput.monthStr, dayInput.dayStr))

我肯定是一团糟,误解了Python的基本知识,但我真的不明白出了什么问题。

python function templates variables dynamic
1个回答
0
投票

一些在线课程或一些好书可以帮助解决这种困惑。我创建了一些示例代码来希望回答您的问题。谢谢。

class Calendar:
    def __init__(self, day, month, year): #This can be initialised with the day/month/year
        self.day = day
        self.month = month
        self.year = year

    def displayDate(self): #This will display the dates from the object created/set
        print('day:{} month:{} year:{}'.format(self.day, self.month, self.year))

    def setNewDate(self, otherDay, otherMonth, otherYear): #this sets the class attributes to something else
        print('This was the old values day:{} month:{} year:{}'.format(self.day, self.month, self.year))
        self.day = otherDay
        self.month = otherMonth
        self.year = otherYear
        print('The new values are day:{} month:{} year:{}'.format(self.day, self.month, self.year))

cal = Calendar(6,11,2020)
cal.displayDate()
cal.setNewDate(3,4,2099)
© www.soinside.com 2019 - 2024. All rights reserved.