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

时间:2015-04-17 02:29:21

标签: 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.__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())

情绪设置为“快乐”的默认值。我需要根据测试中的随机整数滚动进行更改,这样当显示情绪时,它并不总是显示为“快乐”

2 个答案:

答案 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类的实例上调用。