如何调用类内的函数?
- 2024-11-28 08:37:00
- admin 原创
- 11
问题描述:
我有这段代码,用于计算两个坐标之间的距离。这两个函数都属于同一个类。
distToPoint
但是,如何在函数中调用该函数呢isNear
?
class Coordinates:
def distToPoint(self, p):
"""
Use pythagoras to find distance
(a^2 = b^2 + c^2)
"""
...
def isNear(self, p):
distToPoint(self, p)
...
解决方案 1:
由于这些是成员函数,因此将其作为实例上的成员函数调用self
。
def isNear(self, p):
self.distToPoint(p)
...
解决方案 2:
这样做不行,因为distToPoint
它在你的类中,所以如果你想引用它,你需要在它前面加上类名,像这样:classname.distToPoint(self, p)
。但是你不应该这样做。更好的方法是直接通过类实例(类方法的第一个参数)引用该方法,如下所示:self.distToPoint(p)
。
解决方案 3:
在 OP 中,distToPoint()
和isNear()
都是实例方法,因此,它们都将对实例(通常名为self
)的引用作为其第一个参数。当直接从实例调用实例方法时,引用是隐式传递的,因此
self.distToPoint(p)
作品。
如果您想从子类调用重写的父方法,则super()
可以/应该使用。在下面的例子中,方法在和类greet()
中都定义,如果您想调用的,规定的方式是通过,即。也可以通过类名来实现,但有很多反对这种硬编码的论点,比如灵活性、正确使用方法解析顺序的能力等。Parent
`ChildParent
greet()super()
super().greet()Parent.greet(self)
super()`
class Parent:
def greet(self):
print("greetings from Parent!")
def parent_printer(self):
print("this is parent printer")
class Child(Parent):
def greet(self, parent=False):
if parent:
super().greet() # Parent's greet is called
else:
print("greetings from Child!")
def printer(self, greet=True):
if greet:
self.greet() # Child's greet is called
else:
self.parent_printer() # Parent's parent_printer is inherited
c = Child()
c.greet() # greetings from Child!
c.greet(parent=True) # greetings from Parent!
c.printer() # greetings from Child!
c.printer(greet=False) # this is parent printer
解决方案 4:
在上述场景中,您尝试从同一个类中定义的另一个成员方法访问成员方法。
为了实现这一点,您必须 distToPoint(self, p)
像这样使用 self 关键字:从self.distToPoint(self, p)
调用 distToPoint(self, p)
方法isNear(self, p)
。
希望这有帮助。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD