我正在尝试自己学习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?谢谢。附言编辑了一些代码,使其更具逻辑性。
def __init__(self, *args, **kwargs):
self.tank_size = kwargs.get('tank_size', None)
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内置函数。
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.")