Python 类 - 使用实例作为属性

标签 python class oop attributes instance

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

相关文章:

python - 在 python 中创建字符串数组的最佳方法是什么?

python - 在 jinja2 括号中四舍五入

python - 3维字典

c++ - 为什么我不能在 C++ 中将函数作为参数跨类传递?

oop - 建模和责任

python - 我有一个列表,其中包含列表中的项目,我想为每个列表指定一个名称

java - 使用 Class.forname 时发生 ClassNotFoundException

c# 我必须为新类实例指定名称吗?

java - 父类(super class)方法需要引用它的另一个(尽管被覆盖)方法

c++ - 哎呀沮丧