1、实例属性
实例属性,就是赋给由类创建的实例的属性,实例属性属于它所属的实例,不同实例之间的实例属性可以不同。
例:设置实例属性
由于p2实例中没有设置过name属性,因此当Python解释器执行到这行代码时,会抛出属性错误异常。由此可以看出,每个实例之间的属性是分别独立的,属性之间不能共享。
例:通过__init__()方法设置实例属性
当创建实例时,会自动调用__init__()方法,通过该方法为属性赋值。
通过上述方式设置的实例属性都可以被外部访问,但是在实际开发中,可能一些属性不需要被外部访问,就需要控制实例属性的访问权限。
Python中,属性的访问权限是由属性名控制的,如果一个属性由双下划线(__)开头,该属性就无法被外部访问。如果外部需要访问这种变量,可以通过特定的实例方法来访问。
例:属性访问控制权限
因为__address属性外部无法访问,因此Python解释器执行到这段代码时,会抛出属性错误异常。
2、类属性
在类中直接定义的属性被称之为类属性,与实例属性不同的是,类属性会在所有的实例对象中共享。类属性有且只有1份,创建的实例都会继承自唯一的类属性,如果在类上绑定一个属性,那么所有的实例都可以访问类属性,且访问的类属性是同一个,一旦类属性改变就会影响到所有的实例。
例:设置类属性
类属性在实例之间共享,因此类创建的实例都可以访问到类属性。
例:实例对象修改类属性
3、实例属性与类属性重名
例:当实例属性与类属性重名时,实例属性优先级更高
4、实例方法
在类中,定义的普通方法都是实例方法。实例方法隐含的参数为类实例self。实例方法只能被实例调用。
例:定义实例方法
例:类对象调用实例方法
5、类方法
Python中,再类中定义类方法,需要在方法上加上@classmethod装饰器,同时方法中传入cls作为参数,代表当前的类对象,类方法中,可以访问当前类中的类属性,但是不能访问实例属性。
6、静态方法
例:定义静态方法
静态方法可以通过实例对象调用,也可以通过类对象调用。
例:静态方法访问类属性与实例属性
总结
实例方法(普通方法)——————————————————————— 随着实例属性的改变而改变
类方法(无论是类调用还是实例调用)——————————————— 都是类属性的值,不随实例属性的变化而变化
静态方法 —————————————————————————————— 不可以访问类属性,故直接输出传入方法的值