我需要以下问题的帮助。
我创建了此类。
>>>class CountFromBy:
pass
但是我不能从中创建对象。
我想做一个增量计数器。 因此,请输入这些代码,但它们不能以我所假设的方式工作。像这样:
>>>c = CountFromBy()
>>>c
0
>>>c.increase()
>>>c.increase()
>>>c.increase()
>>>c
3
但是,实际上结果是:
>>>c = CountFromBy()
>>>c
<__main__.CountFromBy object at 0x042647F0>
如何获得预期的结果?
答案 0 :(得分:4)
您可能正在寻找一个int
的子类,该子类的作用类似于int
,但有一些额外的行为。
为此,您可以使用继承:
>>> class CountFromBy(int):
... pass
现在,当您编写c = CountFromBy()
时,它是一个CountFromBy
实例,它也是一个int
实例,所以:
>>> c = CountFromBy()
>>> c
0
到目前为止,您尚未添加任何新行为,但如果要执行此操作,则只需添加方法即可:
>>> class CountFromBy(int):
... def squared(self):
... return CountFromBy(self * self)
>>> c = CountFromBy(3)
>>> c
3
>>> c.squared()
9
但是,如果要添加increase()
方法,则存在一个大问题:int
的值是不可变的。由于CountFromBy
值是int
值,因此它们也是不可变的。无法以这种方式编写类。
您可能正在寻找一个使用一个int
而不是一个 的类。为此,您不使用继承,只需创建一个成员:
>>> class CountFromBy:
... def __init__(self):
... self.number = 0
如果希望它打印出其number
值,则可以给它一个str
方法:
>>> class CountFromBy:
... def __init__(self):
... self.number = 0
... def __repr__(self):
... return f'CountFromBy({self.number})'
... def __str__(self):
... return str(self.number)
>>> c = CountFromBy()
>>> c
CountFromBy(0)
>>> print(c)
0
现在,您可以添加该increase
方法-它只是将self.number
替换为新值:
>>> class CountFromBy:
... def __init__(self):
... self.number = 0
... def __repr__(self):
... return f'CountFromBy({self.number})'
... def __str__(self):
... return str(self.number)
... def increase(self):
... self.number = self.number + 1
>>> c = CountFromBy()
>>> c.increase()
>>> c.increase()
>>> c.increase()
>>> print(c)
3
最后,您可能正在寻找两全其美的方式-使用int
进行存储,而这种行为尽可能像int
而不是实际的一样。就像UserDict
和标准库中的朋友一样,因此您可以查看the source for those classes。如您所见,它涉及的更多,所以您可能还不想尝试。另外,您必须决定“尽可能像int
一样行事,同时又易变。
答案 1 :(得分:2)
你去了。
class CountFromBy:
def __init__(self, count=0):
self.count = count
def __repr__(self):
return str(self.count)
def increase(self):
self.count += 1
例如
>>> c = CountFromBy()
>>> c
0
>>> c.increase()
>>> c.increase()
>>> c.increase()
>>> c
3
您还可以通过将初始值传递给构造函数来初始化计数。
>>> c = CountFromBy(5)
>>> c
5
>>> c.increase()
>>> c
6
答案 2 :(得分:1)
这是您可以使用的简单类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("morty", 32)
print(p1.name)
print(p1.age)