私は他のプログラミング言語に精通していますが、Pythonでのコードと、クラスを再割り当てしたときにクラスのプロパティがリセットされない理由を理解するのに苦労しています...例:通知クラスにメソッドがあります
def send(self):
for service in self.hosts:
# func = getattr(self, service)
for host in self.hosts[service]:
try:
if service == 'xbmc':
self.xbmc(host)
elif service == 'growl':
self.growl(host)
elif service == 'prowl':
self.prowl(host)
except:
print "Cound't connect " + host.find('ip').text + " For " + service
ご覧のとおり、これは各サービスを繰り返し処理します(したがって、3つのxbmcがあることに注意してください)
例としてxbmcを取り上げると、メソッドは次のようになります。
def xbmc(self, host):
x = Xbmc(host)
x.notify(self.title, self.message)
他の言語では、xを再度割り当てると、まったく新しい新しいオブジェクトになりますが、Pythonの場合はそうではないようです...
問題を説明するために、xbmcクラスからスニペットを配置します。
class Xbmc:
hosts = []
def __init__(self, host = None):
self.setHosts(host)
self.server = Hosts().getHostsByService('xbmcserver')
def setHosts(self, host = None):
...alot of elif...
elif type(host).__name__ == 'Element': # this code is the one that is in effect from my notify class
self.hosts.append(host)
...more elif...
print self.hosts # for debugging
コードがそこにあるので、送信する通知を開始します。出力は次のとおりです。
[<Element 'host' at 0x7fdda19d0d10>]
XBMC 192.168.1.10 Failed To Connect
[<Element 'host' at 0x7fdda19d0d10>, <Element 'host' at 0x7fdda1955090>]
XBMC 192.168.1.10 Failed To Connect
XBMC 192.168.1.20 Failed To Connect
[<Element 'host' at 0x7fdda19d0d10>, <Element 'host' at 0x7fdda1955090>, <Element 'host' at 0x7fdda19553d0>]
XBMC 192.168.1.10 Failed To Connect
XBMC 192.168.1.20 Failed To Connect
XBMC 192.168.1.21 Failed To Connect
ホストを追加すると、実際には新しいインスタンスになることはなく、すでに存在するものに常に追加されることは明らかです... x = Class()が新しいインスタンスを開始すると仮定しましたか?私が行った場合
self.hosts = [host]
それなら明らかに私は望ましくない効果を得ることができませんが、私の最初のアプローチがうまくいかない理由やそれを克服する方法を知っているのも良いでしょう。リセット方法が必要ですか?または、クラスから新しいインスタンスを作成する方法は実際にありますか?または私のコードに何か問題がありますか?ありがとう....