在另一个程序(Python)的类中调用函数
正如标题所说,如何在另一个程序的类中调用函数 Class.py在另一个程序(Python)的类中调用函数,python,class,call,default,Python,Class,Call,Default,正如标题所说,如何在另一个程序的类中调用函数 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.__
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
生成器.py
from test import Object
import test
mood = 'happy'
ani = Object.test(mood)
print("This is your mood: " + get_mood())
Mood设置为默认值“happy”。我需要根据随机整数滚动测试进行更改,以便在显示情绪时,它不会总是显示为“快乐”您必须显式地调用检查\u 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\u-mood
insideget\u-mood
(或者干脆完全摆脱check\u-mood
,把它的代码放到get\u-mood
)里面
但是,定义
get\u mood
的方式使其修改原始的self.\uu mood
,一旦调用get\u mood,将原始传入的参数变为丢失。。。。这有很多问题。让我们从对象
类开始。您可能不想给某个对象命名,因为它太类似于Python内置的Object
,并且没有提供任何关于类的实际信息。此外,您可能不想调用实例变量\uu mood
——这将调用名称损坏,这可能不是您想要的。您可能甚至不需要一个下划线;它表示一个“私有”数据成员(没有明确的理由说明为什么它应该是私有的)。Python中不需要getter和setter函数,因为您可以直接访问属性,但如果您确实想要更细粒度的控制,请使用属性。最后,我们不需要在check\u mood
函数中不断重新定义随机变量-事实上,它可能会引入bug。让我们看看这个替代定义
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)
这应该打印出人的情绪
在代码中,您永远不会创建对象的实例
——您只需在对象
类上调用一些test()
函数,而不是它的实例。然后,当您调用get\u mood()
时,它不起作用,因为这是一个实例函数-只能在对象的实例上调用它。您能更清楚地说吗?你不能用check_mood方法来改变情绪吗?这段代码非常。。。至少可以说是不一致的。Object.test()
是什么?Object.test()
来自哪里?ani的作用是什么?为什么从不使用check\u mood
get\u mood()
应与类对象的实例一起调用。我想您可能不理解类的静态函数和成员函数之间的区别。@Saicharan S M,这就是我想弄明白的。我猜在调用没有帮助之前有默认值。所以我改变了这一点:def\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoself:self.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu