5

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

给出下面的基本代码......人员对象如何将地址“附加”到它。

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

随你怎么便。也许最简单的方法是:

s.address = hm

但是您并没有说出“附加”的含义。如果您想要更详细的内容(例如,如果您希望在创建 Person 对象时创建地址),那么您需要解释更多。

于 2012-07-17T20:45:07.113 回答
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 回答