我有一个包含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
值。
答案 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.Number
是abc
(抽象基类),这意味着只需将abc
注册到__new__
,就可以将自己的类视为其子类之一。 (我没有必要按照我的第一个想法覆盖numbers.Number
,因为我没有意识到abc
是import 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>