Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用类变量的Python方法,正确的方法_Python_Python 3.x_Oop - Fatal编程技术网

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

使用类变量的Python方法,正确的方法,python,python-3.x,oop,Python,Python 3.x,Oop,我有一个关于python使用OOP的问题。 如果我有两个类和一个从这些类中获取变量的方法,我将这些类作为方法的参数传递,如下所示。我确信这不是正确的方法,这就是为什么我想知道一种更有效的替代方法。具体而言: class Player(object): x_player = 5 y_player = 5 class Food(object): x_food = 10 y_food = 10 def method(Player, Food): if Pla

我有一个关于python使用OOP的问题。 如果我有两个类和一个从这些类中获取变量的方法,我将这些类作为方法的参数传递,如下所示。我确信这不是正确的方法,这就是为什么我想知道一种更有效的替代方法。具体而言:

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')
class播放器(对象):
x_玩家=5
y_玩家=5
类别食物(对象):
食物=10
y_食物=10
def方法(玩家、食物):
如果Player.x_Player>Food.x_Food:
印刷品(‘食品后面’)
如果Player.x_Player
这是正确的吗?如果使用方法
def\uuu init(self)\uuu
,则无法在函数中传递这些变量

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))
多谢各位

如果使用definit(self)方法,则无法在函数中传递这些变量

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))
这种理解是错误的,因为您可以将参数添加到
\uuuu init\uuuu

这个怎么样?还是你仍然坚持使用课堂教学法?如果您选择class方法,您的解决方案已经可以了,只需使用
方法(玩家、食物)
调用即可,甚至您不需要在函数中添加参数

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))
class播放器(对象):
定义初始化(self,x,y):
self.x_player=x
self.y_player=y
类别食物(对象):
定义初始化(self,x,y):
self.x_食物=x
self.y_食物=y
def方法(玩家、食物):
如果player.x_player>food.x_food:
打印(‘食物在后面’)
如果player.x_player
如果这些是类变量,您可以将这些变量称为
classname.var\u 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
,在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


您可能需要再次阅读OOP教程您是否真的在任何地方实例化了类?您似乎正在将类本身用作对象。(无法确定,因为您没有显示如何调用
方法
),如果我的答案对您有帮助,您可以接受