Python-实例作为属性
当我学习Python速成课程时,书中没有回答的一个问题是使用实例作为属性 让我举一个简单的例子:Python-实例作为属性,python,class,Python,Class,当我学习Python速成课程时,书中没有回答的一个问题是使用实例作为属性 让我举一个简单的例子: class Car(): def __init__(self, make, model): self.make = make self.model = model self.tank = Tank() def get_car_info(self): long_name = self.make + ' ' + self.
class Car():
def __init__(self, make, model):
self.make = make
self.model = model
self.tank = Tank()
def get_car_info(self):
long_name = self.make + ' ' + self.model
print('The car is', long_name)
class Tank():
def __init__(self, tank_size=20):
self.tank_size = tank_size
def tank_info(self):
print('The tank size is', self.tank_size, 'gallons')
my_car = Car('Audi', 'S4')
my_car.get_car_info()
my_car.tank.tank_info()
>>>
The car is Audi S4
The tank size is 20 gallons
显然,我创建了两个名为Car和Tank的类,我想使用Tank类实例作为Car的属性。代码会解决的,这里没问题
但我注意到我调用Tank方法的代码:
my_car.tank.tank_info()
如果我理解正确,第一个“坦克”应该是指“坦克”类。那我为什么要把它小写呢?我尝试使用大写字母,但代码不起作用。如果
class Car():
def __init__(self, make, model):
self.make = make
self.model = model
self.tank = Tank()
是
然后你可以调用my\u car.tnk.tank\u info()
如果是
class Car():
def __init__(self, make, model):
self.make = make
self.model = model
self.t = Tank()
然后你可以调用我的车.t.坦克信息()
因此,回答您的问题时,您指的不是坦克类,而是汽车类的成员,该成员属于坦克类如果
class Car():
def __init__(self, make, model):
self.make = make
self.model = model
self.tank = Tank()
是
然后你可以调用my\u car.tnk.tank\u info()
如果是
class Car():
def __init__(self, make, model):
self.make = make
self.model = model
self.t = Tank()
然后你可以调用我的车.t.坦克信息()
因此,要回答您的问题,您指的不是类坦克,而是类汽车的成员,该成员属于类坦克,因为属性将具有您赋予它的名称。一个可以给它与类名相同的名称,但通常避免这样做,按照惯例,属性在Python中是snake\u case
。但是没有什么能阻止你做这样的事情:
>>> class Foo:
... pass
...
>>> class Bar:
... def __init__(self):
... self.Foo = Foo()
... self.foo = Foo()
... self.FOO = Foo()
...
>>> b = Bar()
>>> b.foo
<__main__.Foo object at 0x1021c2710>
>>> b.Foo
<__main__.Foo object at 0x1021c26d8>
>>> b.FOO
<__main__.Foo object at 0x1021c2748>
>>类Foo:
... 通过
...
>>>分类栏:
... 定义初始化(自):
... self.Foo=Foo()
... self.foo=foo()
... self.FOO=FOO()
...
>>>b=巴()
>>>b.foo
>>>b.富
>>>b.FOO
这是一个有三个属性的Bar
对象的人为示例,这三个属性都是Foo
的不同实例,我使用了不同的样式来命名它们
我认为您必须研究的一个基本问题是,您一直使用实例作为属性。一切都是实例str
对象是类str
的实例,int
对象是类int
的实例,list
对象是类list
的实例,就像Foo
对象是类Foo
的实例一样。在Python中,一切都是一个对象 因为属性将具有您指定的名称。一个可以给它与类名相同的名称,但通常避免这样做,按照惯例,属性在Python中是snake\u case
。但是没有什么能阻止你做这样的事情:
>>> class Foo:
... pass
...
>>> class Bar:
... def __init__(self):
... self.Foo = Foo()
... self.foo = Foo()
... self.FOO = Foo()
...
>>> b = Bar()
>>> b.foo
<__main__.Foo object at 0x1021c2710>
>>> b.Foo
<__main__.Foo object at 0x1021c26d8>
>>> b.FOO
<__main__.Foo object at 0x1021c2748>
>>类Foo:
... 通过
...
>>>分类栏:
... 定义初始化(自):
... self.Foo=Foo()
... self.foo=foo()
... self.FOO=FOO()
...
>>>b=巴()
>>>b.foo
>>>b.富
>>>b.FOO
这是一个有三个属性的Bar
对象的人为示例,这三个属性都是Foo
的不同实例,我使用了不同的样式来命名它们
我认为您必须研究的一个基本问题是,您一直使用实例作为属性。一切都是实例str
对象是类str
的实例,int
对象是类int
的实例,list
对象是类list
的实例,就像Foo
对象是类Foo
的实例一样。在Python中,一切都是一个对象 my_car
是car
的一个实例my_car
有一个名为tank
的属性,该属性在创建时被分配了一个tank
的实例<代码>我的车油箱
正在访问my_car
的tank
属性`.self.tank=tank()
分配了一个实例self.tank=tank
会自己分配这个类。@wwii非常感谢!!现在这是非常清楚的my_car
是car
的一个实例my_car
有一个名为tank
的属性,该属性在创建时被分配了一个tank
的实例<代码>我的车油箱
正在访问my_car
的tank
属性`.self.tank=tank()
分配了一个实例self.tank=tank
会自己分配这个类。@wwii非常感谢!!现在这是非常清楚的!!我明白了,所以坦克并不是指坦克类,而是指“self.tank”下的“坦克”。谢谢!!我明白了,所以坦克并不是指坦克类,而是指“self.tank”下的“坦克”。谢谢!!