Python 类属性、实例属性、类方法、实例方法

1、实例属性

实例属性,就是赋给由类创建的实例的属性,实例属性属于它所属的实例,不同实例之间的实例属性可以不同。

例:设置实例属性

设置实例属性
抛出属性异常

由于p2实例中没有设置过name属性,因此当Python解释器执行到这行代码时,会抛出属性错误异常。由此可以看出,每个实例之间的属性是分别独立的,属性之间不能共享。

例:通过__init__()方法设置实例属性

调用__init__()方法
设置属性

当创建实例时,会自动调用__init__()方法,通过该方法为属性赋值。

通过上述方式设置的实例属性都可以被外部访问,但是在实际开发中,可能一些属性不需要被外部访问,就需要控制实例属性的访问权限。

Python中,属性的访问权限是由属性名控制的,如果一个属性由双下划线(__)开头,该属性就无法被外部访问。如果外部需要访问这种变量,可以通过特定的实例方法来访问。

例:属性访问控制权限

为属性设置访问权限

因为__address属性外部无法访问,因此Python解释器执行到这段代码时,会抛出属性错误异常。

2、类属性

在类中直接定义的属性被称之为类属性,与实例属性不同的是,类属性会在所有的实例对象中共享。类属性有且只有1份,创建的实例都会继承自唯一的类属性,如果在类上绑定一个属性,那么所有的实例都可以访问类属性,且访问的类属性是同一个,一旦类属性改变就会影响到所有的实例。

例:设置类属性

设置类属性

类属性在实例之间共享,因此类创建的实例都可以访问到类属性。

例:实例对象修改类属性

实例对象修改类属性
内存分析图

3、实例属性与类属性重名

例:当实例属性与类属性重名时,实例属性优先级更高

实例属性与类属性重名
实例属性优先级更高

4、实例方法

在类中,定义的普通方法都是实例方法。实例方法隐含的参数为类实例self。实例方法只能被实例调用。

例:定义实例方法

定义实例方法

例:类对象调用实例方法

5、类方法

Python中,再类中定义类方法,需要在方法上加上@classmethod装饰器,同时方法中传入cls作为参数,代表当前的类对象,类方法中,可以访问当前类中的类属性,但是不能访问实例属性。

定义类方法,通过实例调用类方法
定义类方法,通过类对象调用类方法
类方法中调用实例属性

6、静态方法

例:定义静态方法

定义静态方法

静态方法可以通过实例对象调用,也可以通过类对象调用。

例:静态方法访问类属性与实例属性

静态方法访问类属性与实例属性

总结

实例方法(普通方法)———————————————————————  随着实例属性的改变而改变

类方法(无论是类调用还是实例调用)———————————————  都是类属性的值,不随实例属性的变化而变化

静态方法 ——————————————————————————————  不可以访问类属性,故直接输出传入方法的值

你可能感兴趣的:(Python 类属性、实例属性、类方法、实例方法)