想问一下,类中的方法难道不也是函数吗?为什么函数play()和函数ah()调用的方式不一样,而且输出的结果也不一样。什么叫作在实例中并不能直接访问到成员变量的私有属性?

谢谢!
想问一下,类中的方法难道不也是函数吗?为什么函数play()和函数ah()调用的方式不一样,而且输出的结果也不一样。什么叫作在实例中并不能直接访问到成员变量的私有属性?

play()是实例方法,意思是创建一个类的实例才能够访问的方法。你的代码里有一个类dog, 所以当你用
dog = Dog("旺财") 这行代码创建了一个Dog类的实例,并将这个实例赋值给dog。这个时候才能通过dog.play()调用play()方法。
ah()是一个普通方法,可以直接调回,无需任何实例;而且实例只能调用class中有的实例方法。ah方法已经在类外,所以无法被实例访问。
另外,python的实例方法中有一个默认的参数,也就是self, 它表示实例本身,可以通过self来调用实例方法,已经属性。
你的代码在有一个错误,就是在ah(self)方法中,ah是普通方法,无法使用self关键字。你可以改成:
def ah(name):
print('我的名字是', name)
所以你现在首先要学会区分不同的方法类型,比如,普通方法,实例方法,类方法,静态方法。