如何使用另一个类的实例作为属性实例化一个类?

问题描述 投票:0回答:3

我正在尝试自己学习Python。我有此代码段:

class Car():

    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.tank = Tank()


class Tank():

    def __init__(self, *args, **kwargs):
        self.tank_size = kwargs.get('tank_size', None)

    def describe_tank(self):
        print("This car has a " + str(self.tank_size) + "-L tank.")

是否可以在不为Tank类的tank_size中的参数__init__指定默认值的情况下实例化Car?谢谢。附言编辑了一些代码,使其更具逻辑性。

python python-3.x class instantiation
3个回答
3
投票
我认为您可以尝试通过kwargs.get访问它,并在那里提供默认值。

def __init__(self, *args, **kwargs): self.tank_size = kwargs.get('tank_size', None)


0
投票
您可以尝试,但是此解决方案将限制您扩展Tank类的输入,以后您必须手动处理所有其他属性。

class Tank(): def __init__(self, *args,**kwargs): if args: self.tank_size = args[0] else: self.tank_size = "Not Specified" def describe_battery(self): print("This car has a {}-L tank.".format(self.tank_size))

对于字符串格式,我也建议使用.format内置函数。

0
投票
您始终可以将其保留为属性,并将其从初始化参数中删除。

class Car(): def __init__(self, make, model, year): self.tank = Tank() class Tank(): def __init__(self): self.tank_size = None def set_tank_size(self, size): self.tank_size = size def describe_battery(self): print("This car has a " + str(self.tank_size) + "-L tank.")

或者,如果您想正确执行操作,则可以使用属性和设置器。

from number import Real class Car(): def __init__(self, make, model, year): self.tank = Tank() class Tank(): def __init__(self): self._tank_size = None @property def tank_size(self): return self._tank_size @tank_size.setter def tank_size(self, size): if not isinstance(size, Real): raise TypeError('Tank `size` must be a number.') if not size >= 0: raise ValueError('Tank `size` must be >= 0.') # electrics have a 0-L tank? self._tank_size = size def describe_battery(self): print("This car has a " + str(self.tank_size) + "-L tank.")

© www.soinside.com 2019 - 2024. All rights reserved.