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)