【问题标题】:instance methods invokation in pythonpython中的实例方法调用
【发布时间】:2021-06-30 11:07:48
【问题描述】:

对象是否有它的方法或从 python 中的超类调用它们? 例如:

class tst():
    def __init__(self,name,family):
        self.name=name
        self.family=family
        
    def fun(self,a,b):
        print(a+b)


newtst=tst("myname","my family")

tst.fun(newtst,3,5)
newtst.fun(3,5)

在上面的代码中,newtst 对象是否从tst 类调用fun 函数,或者它有自己的方法并直接运行它 如果后者是真的,为什么我们需要在定义类的函数中自参数 并且知道id(newtst.fun)id(tst.fun) 不同,但我认为差异是因为在内存中创建了新方法的对象。

【问题讨论】:

  • newtsttst 的一个实例。而且您不必将实例对象作为第一个参数传递给 fun 方法。
  • 不,这是真的。自己试试

标签: python methods instance


【解决方案1】:

实例方法在python中实现为descriptors。 这意味着,单独的实例不会保留方法的单独副本,但获取不同实例的相同属性可能会为每个实例产生单独的结果。

尽管我们拥有的所有实例的属性之外都有相同的函数对象,但这并不意味着

id(tst.fun) == id(newtst.fun)

因为方法描述符在调用类和类实例时给了我们不同的东西。

对于一个类,我们将从tst 获得一个unbound 方法,但对于newtst,它将绑定 到一个实例。

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2016-08-30
    • 2019-01-17
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多