huyanmin 发表于 2022-4-30 08:59:23

python 关于类的实例方法的问题

#通过程序运行,打印后第1处A()函数的id值和第2处A()函数的id值为什么不一样,一个函数地址应该一样啊?
class MyClass:
      def __init__(self):
                self.A()
      def A(self):
                print(id(self.A))#第1处
      
      def B(self):
                print('我是B')
               
a= MyClass.__dict__['A']
print(id(a))#第2处
foo = MyClass()

Twilight6 发表于 2022-4-30 10:18:31



试着运行下这个代码:


class MyClass:
    def __init__(self):
      self.A()


    def A(self):
      print(id(self.A), type(self.A))

    def B(self):
      print('我是B')


print(id(MyClass.A), type(MyClass.A))
print("----------------"*2)
a = MyClass.__dict__['A']
print(id(a), type(a))
print("----------------"*2)
foo = MyClass()

运行结果:
1334136322368 <class 'function'>
--------------------------------
1334136322368 <class 'function'>
--------------------------------
1334129893248 <class 'method'>

从上可以看出,类中定义的实例方法 A ,属于 function,而实例化后的 A 实例方法,变成了 method 方法

所以两者上是有区别的,我个人认为,类中的 A 方法,属于一种 “模板”,后续实例化的对象,都指向实例化后的新建的实例化方法 A ,所以导致地址不同

kogawananari 发表于 2022-4-30 13:13:34

self被偏函数了
页: [1]
查看完整版本: python 关于类的实例方法的问题