我在python中有一个抽象类,希望在其中调用非抽象方法。有可能吗?你知道吗
from abc import ABC, abstractmethod
class MyAbstract(ABC):
# Can I call method get_state() from get_current() ?
def get_state():
get_current() # gives me error?
def get_current():
@abstractmethod
def get_time():
我有另一个python文件,温度py实现这个接口。
在温度py,我使用MyAbstract.get_state()
调用get_state
,得到的错误是get_current()
未定义。你知道吗
不知道为什么。你知道吗
感谢您的帮助。你知道吗
通常,所有方法都有一个名称空间,即它们所附加到的类或对象。如果您有一个类的实例四处浮动(例如
self
,大多数情况下),您可以在该实例上调用方法,自动将实例本身作为第一个参数传递-该实例充当实例方法的命名空间。你知道吗如果您使用的是类方法或静态方法,那么名称空间几乎总是它们所附加到的类。如果您没有指定名称空间,那么python假设您试图调用的任何函数都在全局名称空间中,如果不是,那么您将得到一个
NameError
。你知道吗在这种情况下,以下各项对您适用:
你可以想象,你有一个不可见的
@staticmethod
装饰挂在get_current()
上面,这样标记它。问题是现在你不能改变子类中get_current()
的行为来影响get_state()
的变化。解决方法是使get_state()
成为类方法:调用静态方法使用与调用类方法相同的语法(在这两种情况下,您都会执行
MyAbstract.get_state()
,但后者将调用它的类作为第一个参数传递。然后,您可以使用这个类作为名称空间来为最近定义它的任何子类找到方法get_current()
,这就是您如何用方法实现多态性,否则这个方法是静态的。你知道吗相关问题 更多 >
编程相关推荐