我有一个记忆系统的代码:
def remember():
speak('What do you want me to remember sir?')
toRemember = input('What should I remember? ')
speak('ok, i will remember: ' + toRemember)
return toRemember
def speakRemember():
toRemember = remember()
speak('this is what you told mke to remember: '+toRemember)
每当我触发speakRemember((函数,它从remember((中获取数据时,它就会运行remember(函数。我认为错误在这里:toRemember = remember()
但我不明白为什么它会运行另一个函数。如果有人知道这是一个错误还是人为错误,请告诉我!
(没有错误(
详细阐述我的评论:
class Remember:
def __init__(self, to_remember=None):
self.to_remember = to_remember
def __call__(self):
self.to_remember = input('What Should I remember? ')
def __str__(self):
return f"this is what you told me to remember: {toRemember}"
def __repr__(self):
retrun self.__str__
# If you want to print response while setting a value:
def remember_this(self):
print('What do you want me to remember sir?')
self()
print(f"ok, I will remember: {self.to_remember}")
remember = Remember()
remember()
>> What Should I remember? This
print(remember.to_remember)
>>> 'This'
print(remember)
>>> this is what you told me to remember: This
remember.remember_this()
>>> What do you want me to remember sir?
>>> What Should I remember? That
>>> ok, I will remember: That
print(remember)
>>> this is what you told me to remember: That
如果调用类的实例(在本例中为remember
(,则使用__call__
函数。您还可以创建不同的函数来更改类属性。
__str__
和__repr__
函数用于方便地打印字符串中的值。
你说得对。在编写toRemember = remember()
时,将调用函数remember((。toRemember
的值将是remember()
函数的返回值。当您编写此语句时,函数将被执行,最终返回值将是toRemember
的值