我正在使用Python。我已经阅读了一些关于此的内容,似乎无法将其包裹住。我想做的是创建一个名为Potions的类,其中包含各种药水对象。现在有一种药,一个简单的HealthPotion。我希望药水可以堆叠在库存和商店库存中。因此,我需要一个库存的药水量实例和每个携带药水的商店库存的实例。药水的数量是动态的,用于药水的购买/销售和抢劫。如果有人可以提供基本的解释或示例,那将是很好的。
这是我所拥有的片段:
class Potion(Item):
def __init__(self, name, desc, val, amt, type, effect, bound):
Item.__init__(self, name, desc, val, amt, type, effect, bound)
self.name = name
self.desc = desc
self.val = val
self.amt = amt
self.type = 0 #Restorative
self.effect = effect
def use(self, you):
#Use health potion
you.hp_current += self.effect
you.displayStats()
#Format: Name, Description, Value, Amount, Type, Effect, Bound
HealthPotion = Potion('Health Potion', 'Restores 10 hit points when consumed', 10, 0,
0, 10, 0)
理想情况下,默认数量应设置为0,这样我就可以宣布某家商店的库存数量从多少开始。库存和商店库存被设置为一个阵列,在该阵列中添加和删除项目。我认为我对这如何工作缺乏逻辑,我只是在举例说明金额上遇到了麻烦。
编辑:
这是我拥有的一种购买方法的一部分,以查看不使用实例就会发生什么。这很丑陋,我发现you.inventory.y.amt无法正常工作。y是从“商店”中显示的项目列表中选择的项目。
x = selection - 1 #Item menu starts at 1. But arrays start at 0. So it takes user input and subtracts 1 to match the array.
y = self.stock[x]
if y.val <= you.coin:
if y.amt == 0:
you.inventory.append(y)
you.inventory.y.amt += 1
else:
you.inventory.y.amt += 1;
you.coin -= y.val
self.funds += y.val
if self.stock.y.amt > 1:
self.stock.y.amt -= 1
else:
self.stock.y.amt -= 1
self.stock.pop(x)
我看过这样的例子:
class foo:
a = 1
i = foo()
foo.a => 1
i.a => 1
i.a = "inst"
foo.a => 1
i.a => "inst"
我想知道是否我不只是创建第二个HealthPotion对象,但这听起来不对。这个例子使我另想。也许我只是不了解实例化。
“这将创建Employee类的第一个对象”
emp1 = Employee("Zara", 2000)
“这将创建Employee类的第二个对象”
emp2 = Employee("Manni", 5000)
谢谢!
我认为您可能对类和实例的工作原理有些误解。如果您改为考虑别人,这可能会更有意义。
假设我们要在类层次结构中对人建模。现在,一个人必须有一个名字,如果您要他们说,他们会说出他们的名字:
class Person(object):
def __init__(self, name):
self.name = name
def speak(self):
print "Hi! My name is {self.name}.".format(self=self)
那么,一个实例Person
就是一个人!例如:
>>> basil = Person("Basil")
>>> polly = Person("Polly")
>>>
>>> basil.speak()
Hi! My name is Basil.
>>> polly.speak()
Hi! My name is Polly.
>>> basil == polly
False
因此,实例不是 一种 人,它实际上只是一个人。
我听不到你问的,你不能有一个实例本身就是类的类吗?是的,当然可以!它称为元类,在某些情况下是非常强大的工具。但是,这些不是。
现在,如果您看一下自己的处境,您看到区别了吗?一个HealthPotion
是不特定的药水(比方说,这一个在我的口袋里) -这是一个 样的
药水。而表达这种关系的方式是通过类继承:定义一个HealthPotion
继承自的新类Potion
。然后,您可以拥有这些实例(在我的口袋中,在商店中的任何地方)。如果要使用一种药水,则可以使用一种
特定 的药水,即该类的一个实例。
我知道,当我们使用下面给出的字符串文本时,字符串对象是在字符串池中创建的(如果它不存在的话)。 在上述情况下,池中只会创建一个字符串对象。 但是,当我们使用new关键字时,它总是在堆内存中创建一个新的String对象(即使String池中有一个) 在这里,我有一个困惑,关于在下面的情况下将创建多少对象,以及在哪里(池或堆内存)。
所以我不确定是0还是2。 如果有人知道请告诉我。
如何创建具有整数和字符串输入类型的?如果我创建一个: 这将是一个类型。如果我将其创建为: 这将是类型。我如何创建一个,它可以接受整数和字符串输入类型?谢谢。
问题内容: 我有以下Java代码: 问题很简单:调用此方法将创建多少个对象? 一开始我回答说创建了5个String对象,但是我的书回答说只有3个对象被创建,没有给出解释(这是一个SCJP问题)。 从我的角度来看,有5个对象:“ Fred”,“ 47”,“ Fred47”,“ ed4”,“ ED4”。 我也在SCJP模拟考试中找到了这个问题,答案是3。 问题答案: “ Fred”和“ 47”将来自字
我想使用aws-sdk节点JS为S3 bucket中的某些对象设置不同的过期日期。为此,我使用了和。据我所知,我使用了不同的前缀(=对象名)来为不同的对象设置过期日期。但这种方法不是在创造新的生命周期,而是在取代现有的生命周期。 在AWS文档中:https://docs.AWS.amazon.com/awsjavascriptsdk/latest/AWS/s3.html#PutBucketLife
问题内容: 假设您必须在python中创建10个类对象,并对其进行处理,例如: 您将如何循环处理,并为每个对象分配一个变量(如),从而使代码更短?每个对象都可以在循环外部访问 问题答案: 每天都会以不同的方式询问这个问题。答案是:将数据放在变量名之外,这是必填的博客文章。 在这种情况下,为什么不列出objs?
问题内容: 我有一个自动相互连接的Spring bean图。大大简化了图示: 所有这些bean都没有指定范围,这暗示它们是单例(使它们成为显式单例不会改变任何东西,我已经尝试过)。 问题在于,在实例化 单个应用程序上下文之后 ,的实例和包含的 不同 实例。怎么会这样 我试图为它创建public no args构造函数,并且调试已确认创建了多次。所有这些创建的堆栈跟踪都在这里。 我还尝试过为Spri
我有一张相互自动连线的Spring豆图。高度简化的插图: 所有这些bean都没有指定作用域,这意味着它们是单例(我已经尝试过了,让它们显式单例不会改变任何东西)。 问题是,在实例化单个应用程序上下文之后,Bar和Baz的实例包含不同的Foo实例。这怎么会发生? 我尝试为创建公共no args构造函数,并且调试已确认已多次创建。所有这些创建的堆栈跟踪都在这里。 我还尝试为Spring启用调试日志记录