我想知道它是否更好:
要么
我也可以做,但我想知道什么是更好的做法,或者我可以赶上的地方。
这些是相当基本的例子,当然在第二个例子中,我可以使用该列表。我正在使用的实际代码,我需要使用很多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)
嗯,这取决于,只有你可以决定。
在第一个示例中,您可以在整个程序中的许多位置使用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
这取决于具体情况。
您可以使用第一种方法,因为Object2
不需要任何有关如何构建Object1
的信息。
另一方面,如果你需要在person
中使用Object2
,你应该使用第二种方法,因为它更容易使用person
而不是self.object1.id
,特别是如果你不得不多次使用person
。