我想知道它是否更好:
或
我也可以这样做,但我想知道什么是更好的做法,或者我可以赶上的地方。
这些是相当基本的例子,当然在第二个例子中,我可以使用该列表。我正在使用的实际代码,我需要使用很多Object1值来处理Object2中的事情。
示例1:
class Object1:
def __init__(self, person):
self.id = person[0]
self.name = person[1]
self.age = person[2]
class Object2:
def __init__(self, object1):
self.object1 = object1
retirement_age = self.object1.age + 25
print(self.object1.id)
print(self.object1.name)
print(retirement_age)
person = [1, 'Ryan', 30]
o = Object1(person)
r = Object2(o)
示例2:
class Object1:
def __init__(self, person):
self.id = person[0]
self.name = person[1]
self.age = person[2]
class Object2:
def __init__(self, person):
self.o = Object1(person)
retirement_age = self.o.age + 25
print(self.o.id)
print(self.o.name)
print(retirement_age)
person = [1, 'Ryan', 30]
r = Object2(person)
答案 0 :(得分:0)
这取决于具体情况。
您可以使用第一种方法,因为Object2
不需要任何有关如何构建Object1
的信息。
另一方面,如果您需要在person
中使用Object2
,则应使用第二种方法,因为它更容易使用person
而不是self.object1.id
,特别是如果你不得不多次使用person
。
答案 1 :(得分:0)
嗯,这取决于,只有你可以决定。
在第一个示例中,您可以在整个程序的许多位置使用o
,而无需反复创建相同的对象(只需确保您不在任何地方修改它,请参阅下面的原因)。
第二个选项封装了Object1
甚至存在的事实。
你需要问自己一些问题:
您是否会在代码库中的其他位置使用Object1
个实例?拥有一个独立的"甚至是否有意义? Object1
实例之外的Object2
个实例?
Object2
是否需要了解Object1
?它需要知道如何构建它吗?它应该关心吗?
Object2
个实例是否可以直接包含Object1
的属性?如果答案是“是”'然后Object1
是多余的。
您必须非常小心选项1。
如果您传递到Object2
的对象被任何地方修改,则更改将影响所有相应的Object2
实例。
class Object1:
def __init__(self, person):
self.id = person[0]
self.name = person[1]
self.age = person[2]
class Object2:
def __init__(self, object1):
self.object1 = object1
retirement_age = self.object1.age + 25
print(self.object1.id)
print(self.object1.name)
print(retirement_age)
person = [1, 'Ryan', 30]
o = Object1(person)
r = Object2(o)
# modifying o.name will affect r.object1.name as well
o.name = 'John'
print(r.object1.name)
# 1
# Ryan
# 55
# John