gpt4 book ai didi

Python 类 - 使用实例作为属性

转载 作者:行者123 更新时间:2023-12-05 00:51:41 24 4
gpt4 key购买 nike

在撰写本文时,我目前正在学习/使用 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 时和 pressureTyre 内类。

有没有:

  1. 一种无需在 Tyre 中分配预定值即可实现此目的的方法上课?

    如果我不分配预先确定的值,这是我收到的 Traceback:

    TypeError: __init__() missing 2 required positional arguments: 'size' and 'pressure'
  2. 如果我无法删除预先确定的值,我在调用此类及其方法时覆盖预先确定的值的简单方法?

最佳答案

  1. 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)
  1. 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com