无法创建类,Python3(我是初学者)

时间:2018-06-23 07:30:49

标签: python python-3.x class

我需要以下问题的帮助。

我创建了此类。

>>>class CountFromBy:
       pass

但是我不能从中创建对象。

我想做一个增量计数器。 因此,请输入这些代码,但它们不能以我所假设的方式工作。像这样:

>>>c = CountFromBy()
>>>c
0
>>>c.increase()
>>>c.increase()
>>>c.increase()
>>>c
3

但是,实际上结果是:

>>>c = CountFromBy()
>>>c
<__main__.CountFromBy object at 0x042647F0>

如何获得预期的结果?

3 个答案:

答案 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)