Python - 如何将一个对象引用到另一个对象

时间:2012-07-17 20:43:11

标签: python class

我正在努力解决的更多基本问题......

在下面给出基本代码... 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 个答案:

答案 0 :(得分:7)

尝试:

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)

答案 1 :(得分:1)

但是你想要。也许最简单的方法是:

s.address = hm

但你没有说“附加”是什么意思。如果你想要更复杂的东西(例如,如果你想在创建Person对象时创建地址),那么你需要解释更多。

答案 2 :(得分:1)

你总是通过分配它来附加它(实际上会更新你的实体的内部 dict 字典)

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) : ...

答案 3 :(得分:1)

正如BrenBam所说,依附意思是什么意思。您应该问自己,您在谈论的数据量是多少,您需要多少可靠性。我看到你从person类中分离地址类。这意味着这些不同的对象将用于区分方式。

您应该了解常见的数据库设计实践,以及为什么要将该地址与该人分开,或者反过来为什么不这样做。

例如:

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]

这是一个更好的解决方案,可以解决很多人,或者很多人,或者不关心谁在一个地址生活或工作的应用程序,只是有很多人都值得一些非常重要的垃圾邮件需要激励他们为您的产品。一个军事部队邮件应用程序将受益于事物和人们到处移动。