2015-04-17 30 views
-3

如標題所示,如何在另一個程序的類中調用函數?調用另一個程序的類中的函數 - Python

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()) 

情緒被設置爲 「幸福」 的默認值。我需要以使顯示的心情時,它並不總是顯示爲「幸福」

+1

你能更清楚嗎?你不能只用check_mood方法來改變心情嗎? –

+0

這個代碼是非常不一致的,至少可以說。 – Manhattan

+0

什麼是Object.test()? – Dannnno

回答

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_moodget_mood(或只是擺脫check_mood完全,並把它的代碼裏面get_mood)。

但是,定義get_mood的方式會使其修改原始的self.__mood,使您在調用get_mood後原來的傳入參數丟失。

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的實例 - 你只需要在你的Object類上調用一些test()函數,而不是它的一個實例。然後當你調用get_mood()時,它不起作用,因爲這是一個實例函數 - 它只能在你的Object類的實例上調用。

相關問題