(Java菜鸟来学Python了)
🤔
1. 静态方法与类方法什么区别?
实例方法只能被实例对象调用(Python3 中,如果类调用实例方法,需要显示的传self, 也就是实例对象自己),静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
实例方法,第一个参数必须要默认传实例对象,一般习惯用self。
静态方法,参数没有要求。
类方法,第一个参数必须要默认传类,一般习惯用cls。
2. 构造方法与初始化方法什么区别?
3. 类中的实例方法必须传形参self
否则调用报错
TypeError: Student.sleep() takes 0 positional arguments but 1 was given
4. 为什么python的类属性和类方法,也可以通过对象调用
Python 中的类属性和类方法可以被类和对象共享访问。当使用对象去访问类属性或类方法时,Python 会首先在对象的名称空间中查找,如果没有找到对应的属性或方法,则会转而在其类的名称空间中查找。因此,即使通过对象去调用类属性或类方法,实际上是调用了该类的属性或方法。这一点与类的实例化无关,只与类本身有关。可以通过在类内部使用 @classmethod
和 @staticmethod
修饰器来声明类方法和静态方法。需要注意的是,类方法的第一个参数必须是类本身,约定写作 cls
,而静态方法则没有类参数,使用时与普通函数相同。
5. python可以动态绑定属性,那绑定的属性和类属性一样,会怎么样
在 Python 中,你可以动态地为对象绑定新的属性。这意味着你可以在运行时为对象添加新的属性,而不需要在类定义中显式地声明这些属性。动态绑定属性可以为对象提供灵活性,但需要注意一些潜在的问题。
如果你动态绑定的属性与类属性同名,它们实际上是不同的属性。当你通过对象访问该属性时,Python 首先在对象实例中查找,然后才在类中查找。如果对象实例中存在同名的属性,它会优先使用对象实例中的属性。