在Python中,对象可以有另一个对象作为属性吗?
在Python中,一个对象可以有另一个对象作为它的属性吗?比如说,一个叫car的类可以有一个叫tire的类作为它的属性吗?
4 个回答
2
你可以把类和实例都作为类和实例的属性,这四种组合都可以正常工作,而且可以随意组合。不过,要记住类和实例之间的区别——你提问的方式似乎有点混淆。无论如何,按照你的问题字面意思来理解:
一个叫做车(car)的类可以有一个叫做轮胎(tire)的类作为属性吗?
class tire(object):
...class body here...
class car(object):
thetire = tire
...rest of class body here...
在车类的内部,如果你写 tire = tire
这样的赋值是行不通的(因为名字搞混了!),所以你需要给类属性起个不同的名字,不能和它的值的类同名。(这条规则不适用于实例属性,因为实例属性的写法,比如 self.tire
,是带有前缀的名字,不会造成名字混淆——这只适用于类属性)。这是否正是导致你提出这个问题的原因呢?
2
是的。
>>> class tire:
... pass
...
>>> class car:
... def __init__(self, tire):
... self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
3
你是指一个叫做 tire
的类,还是这个类的一个实例呢?这两者都可以,不过后者可能更有用。如果你想要一个 对象,这个对象是类 Mary
的,并且它要有一个类型为 Fred
的对象,那么你就需要使用 classinst
这种赋值方式:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
>>> class Fred(object): pass
...
>>> class Mary(object):
... def __init__(self):
... self.classref = Fred
... self.classinst = Fred()
...
>>> x = Mary()
>>> dir(x)
[... 'classinst', 'classref']
>>> x.classref
<class '__main__.Fred'>
>>> x.classinst
<__main__.Fred object at 0xb76eed0c>