如何更改对象的超类?

时间:2017-02-11 15:50:28

标签: python python-2.7 python-3.x numbers super

我有一个包含Python方法和构造函数的类。构造函数的返回值将是一个对象,但我需要一个类(构造函数)的返回值,例如numbers.Number类型。

是否可以通过添加numbers.Number作为此类的超类来更改类的返回值,如果是,有人可以描述如何执行此操作吗?

class Num(Parent):
    #Some Code
    #Here Parent must be inherited

class Foo(Num):
    #Foo Should return of type numbers.Number
    #Here Num must be inherited

现在,每当我们调用Foo的构造函数时,我都希望number.Number返回Foo值。

3 个答案:

答案 0 :(得分:0)

这可以通过标准class inheritance完成。

from numbers import Number

class MyNumber(Number):
    def is_number(self):
        return isinstance(a, Number)

a = MyNumber()
print(a.is_number())

应该注意的是numbers module的所有类都是Abstract Base Classes(ABCs)并且无法实例化。它们类似于其他语言(如Java)中的接口,并以相应的类型实现,例如, int实施numbers.Integral

通过使用numbers.Number作为基类,您将在MyNumber中拥有该类的所有操作,但如果使用MyNumber(2)之类的值对其进行实例化,则会获得TypeError: object() takes no parameters {1}}。

答案 1 :(得分:0)

也许你必须从int类型继承:

class MyClass(int):
    ....

答案 2 :(得分:0)

我不确定你要通过这样做完成什么,也不确定你期望发生什么。但是,由于numbers.Numberabc(抽象基类),这意味着只需将abc注册到__new__,就可以将自己的类视为其子类之一。 (我没有必要按照我的第一个想法覆盖numbers.Number,因为我没有意识到abcimport numbers class Parent(object): # Added only to make script runnable pass class Num(Parent): #Some Code #Here Parent must be inherited pass class Foo(Num): #Foo Should return of type numbers.Number #Here Num must be inherited pass numbers.Number.register(Foo) foo = Foo() print(isinstance(foo, numbers.Number)) # -> True 。)

这就是我的意思:

<intent-filter>
    <action android:name="com.tylerr147.toast" />
<category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>