python一个类调用另一个类的方法_Python:从另一个类调用方法的最佳方法?

该博客讨论了在Python类中如何处理外部数组(如aGame)的引用。作者提出了三种方法:通过构造函数传递,作为参数传递,或者使用全局变量。建议避免全局变量,因为它们可能导致混乱。在构造函数中传递aGame被认为是最好的做法,特别是对于测试目的。如果一个Player实例需要与多个aGame实例配合使用,则可以考虑将aGame作为方法参数。
摘要由CSDN通过智能技术生成

我有以下代码:

class Player:

def __init__(self, username, trip, model):

self.username = username

self.trip = trip

self.hp = 100

#### For player moving location/room ####

def Move(self, dest):

if dest == self.loc:

return True

# Check destination room is accessible from current room

for room in aGame['rooms']:

if room['ref'] == self.loc:

for acsroom in room['acs']:

if acsroom == dest:

self.loc = dest

return True

return False

aGame是一个在此类之外定义的数组,因此此代码不起作用.

由于这个类中可能有许多其他函数可能会使用aGame数组,我应该这样做:

class Player:

def __init__(self, username, trip, model, aGame):

self.username = username

self.trip = trip

self.hp = 100

self.aGame = aGame

#### For player moving location/room ####

def Move(self, dest):

if dest == self.loc:

return True

# Check destination room is accessible from current room

for room in self.aGame['rooms']:

if room['ref'] == self.loc:

for acsroom in room['acs']:

if acsroom == dest:

self.loc = dest

return True

return False

或者这样做会更好:

class Player:

def __init__(self, username, trip, model):

self.username = username

self.trip = trip

self.hp = 100

#### For player moving location/room ####

def Move(self, dest, aGame):

if dest == self.loc:

return True

# Check destination room is accessible from current room

for room in aGame['rooms']:

if room['ref'] == self.loc:

for acsroom in room['acs']:

if acsroom == dest:

self.loc = dest

return True

return False

或者我应该让aGame成为一个全局变量(如果是这样,如何,请注意这个类在不同的文件中)?

由于aGame是一个遍布各处的数组,因此必须在每个类中复制它是不正确的.

我可能有这个错误,我正在慢慢学习OOP,谢谢你的帮助.

解决方法:

在我看来,第一个选项是正确的,因为它没有充分的理由使用全局变量.所以选择在第二和第三之间.

决定性的功能是,如果您想要为多个aGame值使用相同的Player实例.如果只有一个值,那么我会将它传递给构造函数(你的选项2)或使用gnibbler的想法使它成为一个类变量.我可能赞成将它传递给构造函数以便于测试.

如果您希望同一个Player实例可用于多个aGame值,那么选项3可能是实现该目标的最简洁方法.

标签:python,oop,dictionary,global,class

来源: https://codeday.me/bug/20190630/1340332.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值