5

私が苦労しているより基本的な質問...

以下に基本的なコードを示します...personオブジェクトはどのようにしてアドレスを「添付」しますか。

class Person(object):
    def __init__(self, fn, ln):
        self.uid    = Id_Class.new_id("Person")
        self.f_name = fn
        self.l_name = ln

class Address(object):
    def __init__(self, st, sub):
        self.uid    = Id_Class.new_id("Address")
        self.street = st
        self.suburb = sub

s = Person('John', 'Doe')

hm = Address('Queen St.', 'Sydney')
4

4 に答える 4

9

試す:

class Person(object):
    def __init__(self, fn, ln, address):
        self.uid    = Id_Class.new_id("Person")
        self.f_name = fn
        self.l_name = ln
        self.address = address

class Address(object):
    def __init__(self, st, sub):
        self.uid    = Id_Class.new_id("Address")
        self.street = st
        self.suburb = sub

hm = Address('Queen St.', 'Sydney')

s = Person('John', 'Doe', hm)
于 2012-07-17T20:44:55.490 に答える
1

あなたは常にそれに割り当てることによってそれを添付します(これは実際にはあなたのインスタンスの内部辞書辞書を更新します

s.address = hm
print s.address
>>> <object Address ...>

または、コンストラクター内から実行することをお勧めします。

class Person : 
    def __init__(self,fn,ln,my_address) : 
        [... snip]
        self.address = my_address 

これはまったく同じですが、アドレス属性があり、値がない場合は常にデフォルトの引数を持つことができます。

def __init__(self,fn,ln,my_address=None) : ...
于 2012-07-17T20:49:10.627 に答える
1

BrenBamが尋ねているように、アタッチとはどういう意味ですか。どれだけのデータについて話しているのか、どれだけ信頼できるのかを自問する必要があります。住所クラスと人クラスを分けているようです。これは、これらの異なるオブジェクトが差別化された方法で使用されることを意味します。

一般的なデータベース設計の慣行と、その人からアドレスを分離する理由、または逆に分離しない理由を知っておく必要があります。

例えば:

addresses = {}
persons = {}
records = {}

address = Address(...)
person1 = Person(...)
person2 = Person(...)

addresses[address.uid] = address
persons[person1.uid] = person1
persons[person2.uid] = person2

records[address.uid] = [person1.uid, person2.uid]

これは、多くの人がいるアドレス、たくさん移動する人、またはアドレスに住んでいる人や働いている人を気にしないアプリの場合に適したソリューションです。あなたの製品のためにそれらを刺激する必要がある重要なジャンクメール。軍隊の郵送アプリは、物事や人々がいたるところに移動するのでメリットがあります。

于 2012-07-17T20:57:06.417 に答える
1

しかしあなたが望む。おそらく最も簡単な方法は次のとおりです。

s.address = hm

しかし、あなたは「アタッチ」が何を意味するのかを言いません。より複雑なものが必要な場合(たとえば、Personオブジェクトの作成時にアドレスを作成する場合)、詳細を説明する必要があります。

于 2012-07-17T20:45:07.113 に答える