【发布时间】:2018-11-04 10:25:52
【问题描述】:
我有两节课
class Car:
def __init__(self, position):
self.position = position
class Bike:
def __init__(self, position):
self.position = position
在一个单独的文件中,我正在创建多辆汽车和自行车:
cars_list = [Car(position[i]) for i in range(position_list)]
我想在当前时刻每次创建Bike 实例时在Bike 类中调用并使用cars_list。
class Bike:
def __init__(self, position):
self.position = position
for i in cars_list:
# continue with code
因此,如果 cars_list 在创建新的 Bike 之前发生更改,则在 Bike 中调用当前的 cars_list。我知道如何做到这一点的方法是在Bike where 中添加另一个参数
def __init__(self, position, cars_list):
self.position = position
for i in cars_list:
# continue with code
当调用bike 时,cars_list 作为参数传递。但是有没有办法将当前的cars_list 存储在Car 类中,然后在该类中创建一个名为get_current_instances 的方法,以便可以在Bike 类中调用它?
【问题讨论】:
-
您可以简单地执行
Car.cars_list = [...],然后从您可以访问Car类的任何地方访问它。但这听起来真的很疯狂,我无法想象你想用它做什么。至少,您应该将列表作为参数传递给Bike,就像您正在做的那样。 -
@deceze 严格来说,全局列表可以完成这项工作,但由于 OP 会遇到定义类的麻烦,因此避免全局变量是有意义的。如果 OP 想要做一个 OOP 解决方案,类属性和类方法是完全正确的用例。
-
@Tony 使用类属性不是在做“OOP”……
-
@deceze 我不敢苟同。甚至 C++ 也提供与类属性相同的静态属性。它可能不是纯粹的 OOP,但它是许多语言中的常见习语。它肯定比全局更好。
-
@TonySuffolk66 类属性只是命名空间中的全局状态。
标签: python class oop object instance