Can';不要创建类,Python3(我是初学者)
下面的问题我需要一些帮助 我创建了这个类Can';不要创建类,Python3(我是初学者),python,python-3.x,class,Python,Python 3.x,Class,下面的问题我需要一些帮助 我创建了这个类 >>>class CountFromBy: pass 但我不能从中创建对象 我想做一个递增计数器。 所以输入这些代码,但它们不能以我假设的方式工作。像这样: >>>c = CountFromBy() >>>c 0 >>>c.increase() >>>c.increase() >>>c.increase() >>>
>>>class CountFromBy:
pass
但我不能从中创建对象
我想做一个递增计数器。
所以输入这些代码,但它们不能以我假设的方式工作。像这样:
>>>c = CountFromBy()
>>>c
0
>>>c.increase()
>>>c.increase()
>>>c.increase()
>>>c
3
但是,实际上结果是:
>>>c = CountFromBy()
>>>c
<__main__.CountFromBy object at 0x042647F0>
>c=CountFromBy()
>>>c
我怎样才能得到预期的结果呢?好了
class CountFromBy:
def __init__(self, count=0):
self.count = count
def __repr__(self):
return str(self.count)
def increase(self):
self.count += 1
e、 g
还可以通过将初始值传递给构造函数来初始化count
>>> c = CountFromBy(5)
>>> c
5
>>> c.increase()
>>> c
6
您可能希望创建一个
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
如果您想让它打印出它的编号
值,可以给它一个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
进行存储。这就像标准库中的和朋友一样,所以您可以查看。正如你所看到的,它有点复杂,所以你可能还不想尝试。此外,您还必须决定“尽可能像int
”这样操作的含义,同时又是可变的。这是一个可以使用的简单类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("morty", 32)
print(p1.name)
print(p1.age)
为什么您希望计算
c
时显示0
,而不是显示CountFromBy
对象?(还有,当您还没有在任何地方定义一个increase()
方法时,为什么您希望能够调用该方法呢?)。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("morty", 32)
print(p1.name)
print(p1.age)