我对使用OOP的python有疑问。 如果我有两个类,并且有一个从这些类中获取变量的方法,则将这些类作为方法的参数传递,如下所示。我确信这不是正确的方法,这就是为什么我想知道另一种更有效的方法。具体来说:
)$
这是正确的吗?如果我使用方法class Player(object):
x_player = 5
y_player = 5
class Food(object):
x_food = 10
y_food = 10
def method(Player, Food):
if Player.x_player > Food.x_food:
print('Food behind)
if Player.x_player < Food.x_food:
print('Food in front')
,则无法在函数中传递这些变量。
谢谢
答案 0 :(得分:0)
如果我使用def init(self)方法,则无法在函数中传递这些变量。
这种理解是错误的,因为您可以向__init__
添加参数。
这个怎么样?还是您仍然坚持使用类方法?如果选择类方法,则您的解决方案已经可以,只需用method(Player, Food)
调用,甚至不需要在函数中添加参数。
class Player(object):
def __init__(self, x, y):
self.x_player = x
self.y_player = y
class Food(object):
def __init__(self, x, y):
self.x_food = x
self.y_food = y
def method(player, food):
if player.x_player > food.x_food:
print('Food behind')
if player.x_player < food.x_food:
print('Food in front')
method(Player(5, 5), Food(10, 10))
答案 1 :(得分:0)
如果这些变量是类变量,则可以将这些变量简称为classname.var_name
:
class A:
a = 10
if __name__ == '__main__':
print(A.a)
如果值是由实例定义的,则需要实例化类变量,然后可以对此进行比较
class A:
def __init__(self, a):
self.a = a
if __name__ == '__main__':
x = A(5)
y = A(10)
print(x.a > y.a)
>> False
这也是python
,在python中,您无需指定函数参数的数据类型,因此可以发送任何对象,而不必担心它是哪个类的实例。如果发送了错误的类的对象,则您的代码应处理异常。
class A:
def __init__(self, a):
self.a = a
class B:
def __init__(self, a):
self.a = a
def fun(obj):
print(obj.a)
if __name__ == '__main__':
x = A(5)
y = B(10)
fun(x)
fun(y)
>> 5
>> 10
class A:
def __init__(self, a):
self.a = a
class B:
def __init__(self, a):
self.a = a
def fun(obj):
if not isinstance(obj, B):
print(obj.a)
if __name__ == '__main__':
x = A(5)
y = B(10)
fun(x)
fun(y)
>> 5