在另一个程序(Python)的类中调用函数

在另一个程序(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.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
生成器.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
inside
get\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