使用类变量的Python方法,正确的方法

时间:2018-07-20 09:02:57

标签: python python-3.x oop

我对使用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') ,则无法在函数中传递这些变量。

谢谢

2 个答案:

答案 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