4

別のクラス名のオブジェクトを作成できる必要がある「class1」があります。クラス名は「friend」という引数として渡されます。「friend」引数のデフォルトを「class2」というクラス名にします。

さらに、クラス「class2」に対して同じ動作をさせる必要があります。したがって、「class2」にはデフォルトのフレンド引数として「class1」が必要です。

class class1():
 def __init__(self, friend = class2):
  self.friendInstance = friend()

class class2():
 def __init__(self, friend = class1):
  self.friendInstance = friend()

class1()
class2()

今、私は次のエラーメッセージを受け取ります:

    def __init__(self, friend = class2):
NameError: name 'class2' is not defined

もちろん、class1 の前に class2 を定義することはできません。これは、「class1」が定義されていないという同様のエラーが発生するためです。解決策を知っていますか?

助けてくれてどうもありがとう!

ヘンリー

4

2 に答える 2

3

後でプッシュできます:

class class1(object):
    def __init__(self, friend=None):
        if friend is None:
            friend = class2
        self.friendInstance = friend()

編集:実際には、そうしないでください。class2 インスタンスを作成する class1 インスタンスを作成する class2 インスタンスを作成します。おそらく、インスタンス化するクラスの代わりにインスタンスを渡したい場合があります。

class class1(object):
    def __init__(self, friend=None):
        if friend is None:
            self.friendInstance = class2(self)
        else:
            self.friendInstance = friend

class2 についても同様です。これはそれほど柔軟ではありませんが、非常に単純です。本当に柔軟性が必要な場合は、次のようにすることができます。

class class1(object):
    def __init__(self, friend=None, friendClass=None):
        if friend is None:
            self.friendInstance = (class2 if friendClass is None else friendClass)(self)
        else:
            self.friendInstance = friend

class class2(object):
    def __init__(self, friend=None, friendClass=class1):
        if friend is None:
            self.friendInstance = friendClass(self)
        else:
            self.friendInstance = friend

これは継承またはメタクラスで単純化できますが、おそらく理解できるでしょう。

于 2011-01-10T15:33:39.953 に答える
1

問題を解決したとしてもNameError、再帰的なデータ構造を作成しようとしているという別の問題に遭遇します。の各インスタンスはのインスタンスを作成class1しようとし、同様に別のインスタンスを作成しようとします。class2class1RuntimeError: maximum recursion depth exceeded

あなたが実際にやろうとしていることについてもう少し知らなくても、ここに1つの簡単な解決策があります:

class class1(object):
    def __init__(self, friend=None):
        if friend is None:
            friend = class2(self) # create a class2 instance with myself as a friend
        self.friendInstance = friend

class class2(object):
    def __init__(self, friend=None):
        if friend is None:
            friend = class1(self) # create a class1 instance with myself as a friend
        self.friendInstance = friend

print class1()
# <__main__.class1 object at 0x00B42450>
print class2()
# <__main__.class2 object at 0x00B65530>
于 2011-01-10T17:02:50.213 に答える