正如标题所说,你如何在另一个程序的类中调用函数?
Class.py
class Object:
def __init__(self, mood):
self.__mood = mood
def set_mood(self, mood):
self.__mood = mood
def check_mood(self):
if random.randint(1, 3) == 1:
self.__mood = 'happy'
elif random.randint(1, 3) == 2:
self.__mood = 'hungry'
elif random.randint(1, 3) == 3:
self.__mood = 'sleepy'
def get_mood(self):
return self.__mood
Generator.py
from test import Object
import test
mood = 'happy'
ani = Object.test(mood)
print("This is your mood: " + get_mood())
情绪设置为“快乐”的默认值。我需要根据测试中的随机整数滚动进行更改,这样当显示情绪时,它并不总是显示为“快乐”
答案 0 :(得分:0)
您必须 明确 调用check_mood
才能更改对象的属性。请参阅下面的代码。
from random import randint
class Foo(object):
def __init__(self, mood):
self.__mood = mood
self.__selection = {
1:'happy',
2:'hungry',
3:'sleepy',
4:'angry',
5:'bored'
}
def check_mood(self):
m = randint(1,5)
self.__mood = self.__selection[m]
def get_mood(self):
return self.__mood
mood = 'happy'
f = Foo(mood)
print 'This is your previous mood:', f.get_mood()
f.check_mood() # This rerolls the mood.
print 'This is your current mood:', f.get_mood()
# This is your previous mood: happy
# This is your current mood: bored
否则,如果您希望更改“幕后花絮”,我建议您在 check_mood
内调用get_mood
(或者只是删除check_mood
完全并将其代码放在get_mood
)中。
但是,定义get_mood
的方式会使其修改原始self.__mood
,一旦您调用get_mood
,就会将原始的传入参数视为丢失。
答案 1 :(得分:0)
这有很多问题。让我们从您的Object
课程开始。您可能不希望命名Object
- 它与Python内置的object
太相似,并且不提供有关该类的功能的任何真实信息。另外,您可能不希望调用实例变量__mood
- 这将调用名称修改,这可能不是您想要的。你可能甚至不想要单个下划线;它代表一个“私人”数据成员(并且没有明确的理由说明这应该是私有的)。您不需要Python中的getter和setter函数,因为您可以直接访问属性,但如果您确实需要更精细的控制,请使用属性。最后,我们不需要在check_mood
函数中继续重新定义随机变量 - 实际上它可能会引入错误。让我们看看这个替代定义。
person.py
import random
class Person(object):
_mood = None
def __init__(self, mood):
self.mood = mood
@property
def mood(self):
return self._mood
@mood.setter
def mood(self, new_mood):
self._mood = new_mood
def check_mood(self):
rand_mood = random.randint(1, 3)
if rand_mood == 1:
self.mood = 'happy'
elif rand_mood == 2:
self.mood = 'hungry'
else:
self.mood = 'sleepy'
那好一点。让我们现在看看你的另一个文件。
from person import Person
myPerson = Person("happy")
print("This is your mood: ", myPerson.mood)
这应该打印出Person
的情绪。
在您的代码中,您永远不会创建Object
的实例 - 您只需在test()
类上调用一些Object
函数,而不是它的实例。然后,当您调用get_mood()
时它不起作用,因为它是一个实例函数 - 它只能在Object
类的实例上调用。