在撰写本文时,我目前正在学习/使用 Python 3.10.2 中的类。我想要实现的是创建一个类实例,它是另一个类中的一个属性。
这是我一直在编写的一些代码,以帮助证明我的观点。
class Vehicle():
"""To model a basic vehicle"""
def __init__(self, name, max_speed, millage):
"""Initiate class variables"""
self.name = name
self.max_speed = max_speed
self.millage = millage
self.tyre = Tyre()
def vehicle_details(self):
"""display vehicle details"""
return f"\nName: {self.name.title()}, Max speed: {self.max_speed}MPH, Millage: {self.millage} "
class Tyre():
"""A class specific for vehicle tyres"""
def __init__(self, size=16, pressure=36):
self.size = size
self.pressure = pressure
def tyre_details(self):
"""Print tyre details."""
print(f'Tyre size: {self.size} inches.')
print(f"Tyre pressure {self.pressure} PSI.")
在 Vehicle
类,我添加Tyre()
作为一个属性。
现在这段代码可以工作了,我可以调用Tyre
方法通过我的Vehicle
实例,但仅当我将预定值分配给 size
时和 pressure
在 Tyre
内类。
有没有:
一种无需在
Tyre
中分配预定值即可实现此目的的方法上课?如果我不分配预先确定的值,这是我收到的 Traceback:
TypeError: __init__() missing 2 required positional arguments: 'size' and 'pressure'
如果我无法删除预先确定的值,我在调用此类及其方法时覆盖预先确定的值的简单方法?
最佳答案
- A way I can achieve this without having to allocate the pre-determined values within the Tyre class?
一种可能的解决方案是在初始化 Vehicle
时传递 Tyre
的参数:
class Vehicle:
def __init__(self, name, max_speed, millage, tyre_size=16, tyre_pressure=36):
"""Initiate class variables"""
self.name = name
self.max_speed = max_speed
self.millage = millage
self.tyre = Tyre(size=tyre_size, pressure=tyre_pressure)
- An easy way for me to overwrite the pre-determined values when calling this class and its methods if I am unable to remove the pre-determined values?
您不能简单地使用任何预先确定的值,要求它们被明确提供:
class Tyre:
def __init__(self, size, pressure):
# ...
如果没有传递任何值,则会引发异常。只有当你真的想要时,你才应该依赖预先确定的值。而不是总是依赖一组特定的预定值。
一般来说,我建议仅在您很少需要与默认值不同的值时才使用预先确定的值。例如,如果你有一个 User
类,你可能总是使用不同的 username
。没有明显的默认值。另一方面,当您有一个 Vehicle
类时,在大多数情况下它将有 4 个门,但有时可能会有所不同(可能是 5 个),因此您可以将 4 作为默认值并在你需要。
关于Python 类 - 使用实例作为属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71550471/