2016-03-27 16 views
1

... İşte Python'da, ana modülde oluşturulan bir örneğe diğer modüllerden nasıl erişebilirim? Ben OOP ve Python hakkında fazla bilmiyordum

bir sorularıma hakkında örnek: benim ana modülün

# main.py 
#--------- 

class MyRobot(): 

    def __init__(self): 
     self.move = 0 

    def walk(self): 
     self.move += 5 

    def botInfo(self): 
     # In my case, 
     # I can only address track.howFar to my main module 
     import track 
     getInfo = track.howFar 
     print getInfo() 


if __name__ == '__main__': 
    bot = MyRobot() 
    bot.walk() 
    bot.botCMD() 

bir sınıf nesnesi varsa ve başka bir modül var

# track.py 
#--------- 
def howFar(): 
    return bot.move # How?? 

ben track.py den bot nesnede move değerini almak gerekir

Bu mümkün mü?

Ne yapmalıyım?

---- Güncelleme -----

Ben

Aslında python-telegram-bot 'in commandHandler hakkında biraz araştırma yapıyordu ... Bu örnek durum gerçekten garip gelecek

lütfen Bir sürü detayı atladığım için beni affet, çünkü telegram numaralı telefonun kendisiyle ilgili bir sorun olmadığını düşünmüştüm. Zamanını boşa eğer özür dileriz listem

... yorumlarda jonrsharpe tarafından belirtildiği gibi

+1

... 'import' it? Ama 'bot' sadece doğrudan çalıştırırsanız oluşturulur - neden? – jonrsharpe

+0

Başka bir yöntemle "al" ı denedim, ancak sahip olduğum tek şey varsayılan değer ... – davidlatwe

+1

Bundan sonra bir ** bu ** göster. – jonrsharpe

cevap

0
taşımak için

İlk parçası olacak Main.py adresinden robot.py (veya myrobot.py) no'lu telefondan söylemek için.

Sonraki, programınızın nasıl yazıldığına bağlı olacaktır. Daha az ideal, robot.py'de class myRobot örneğini, o modülü içe aktaran her şeyden erişebileceğiniz bir genel değişkene atamak olabilir.

Belki ikinci az ideal Eğer MyRobot diyebiliriz oradan

class myRobot(): 
    _my_robot = None 

    @classmethod 
    def MakeRobot(cls): 
     if cls._my_robot is None: 
      cls._my_robot = cls() #cls is `class myRoboto` 

     return cls._my_robot 

gibi bir sınıf değişkeni var olacaktır.MakeRobot() bir kez yeni bir örnek oluşturmak ve MakeRobot() için sonraki çağrılar aynı örneği döndürür.

Komut dosyanızın asıl işlevinde daha ideal çözüm, bir myRobot örneği oluşturun ve gereken yere iletmesini sağlayın. İlgisiz

def run_program(): 
    robot = myRobot() 

    while True: #or however your script runs 
     #do robot move logic 
     howFar(robot) 

, hep myRobot veya my_robot değişken iken MyRobot bir sınıf olduğunu başkalarını anlatır Ortak bir kural tarafından olduğu gibi sınıfların isimlerini büyük harf öneriyoruz.

+0

Cevabınız için teşekkür ederiz, gerçekten yardımcı oldu! – davidlatwe

0

, aşağıdakiler bir ImportError atar.

from main import bot 

Bunun yerine, o zaman sınıf içe yeni dosyasında nesne yapmak zorunda.

from main import myRobot 

bot = myRobot()  

def howFar(): 
    return bot.move 

print(howFar()) 

Çıktı

0 
0
import main 
bot = main.myRobot() # bot.move 

from main import myRobot 
bot = myRobot() # bot.move 

def howFar(robot_instance): 
    return robot_instance.move 

howFar(bot) # passing instance 
İlgili konular