python中class中类属性与实例属性以及类方法和静态方法的介绍
属性的介绍:
尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性。实例属性在每创造一个类是都会初始化一遍,不同的实例的实例属性可能不同,不同实例的类属性都相同
1:实例属性:
在__init__(self,…)中初始化
内部调用时都需要加上self.
外部调用时用“对象名.属性名”调用
2:类属性:
在__init__()里初始化
在内部用classname.类属性名调用
外部既可以用classname.类属性名又可以用instancename.类属性名来调用
方法的介绍
1:普通方法:
def fun_name(self,…):
pass
外部用实例调用
2:静态方法:通过装饰器 @staticmethod 装饰
不能访问实例属性
参数不能传入self
与类相关但是不依赖类与实例的方法
3:类方法:@classmethod
不能访问实例属性
参数必须传入cls
必须传入cls参数(即代表了此类对象-----区别------self代表实例对象),并且用此来调用类属性:cls.类属性名
静态方法与类方法都可以通过类或者实例来调用。其两个的特点都是不能够调用实例属性
静态方法不需要接收参数,使用类名.类属性
代码示例
class d():
d1= 111 #类属性
__d3 = 222 #私有属性 (不允许在外部调用)
def __init__(self,age):
self.age=age
def fun1(self): #普通方法
print(self.__d3)
print(self.age)
self.d2 = 222 #实例属性
@classmethod #类方法
def fun2(cls,ss):
print(cls.d1)
print(ss)
print('classmethod')
@staticmethod #静态方法
def fun3(data):
print()
print('staticmethod')
D = d(333)
#------------------------------------
#实例方法 #实例方法只能被实例化对象调用
D.fun1()
#-----------------------------------------------------
类方法 能够被类名或者实例化对象调用 (被类名调用,就能实现跳过实例化这一步)
D.fun2('类参数')
d.fun2('类参数')
类方法和静态方法 的区别: 1,定义;2参数
#-----------------------------------------------------
静态方法 能够被类名或者实例化对象调用 (被类名调用,就能实现跳过实例化这一步)
D.fun3(22)
d.fun3(33)