https://www.runoob.com/python/python-object.html
http://c.biancheng.net/view/2283.html
1.类体中、所有函数之外:此范围定义的变量,称为类属性或类变量;
类变量为所有实例化对象共有,通过类名修改类变量的值,会影响所有的实例化对象
类名.变量名 访问
2.类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;
对象.变量名 访问
3.类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。
局部变量只能用于所在函数中,函数执行完成后,局部变量也会被销毁
http://c.biancheng.net/view/4552.html
https://www.cnblogs.com/shenh/p/13045035.html
1.实例方法:
参数第一个必须是self,代表对象/实例本身。
只能用类的对象调用方法。
不需要传递self参数,此时类的对象/实例 会隐式的传递到self。
可以获取类属性、构造函数定义的变量
构造函数也属于实例方法。
类的构造方法,在一个对象被创建以后会首先被立即调用,来初始化新创建对象的状态,分配内存
def __init__(self):
https://www.runoob.com/python/python-func-super.html
如果在子类中需要父类的构造方法可选择:
1)先super用来调用父类中的方法,然后自己的类中重写构造方法
super(子类Class, self).xxx
def __init__(self, name):
super(Son, self).__init__(name)
2)子类不重写父类的构造方法,即子类根本不写构造函数。实例化子类时,会自动调用父类定义的 init。
2.类方法:@classmethod
参数第一个必须是cls,代表 类本身(注意不是实例本身,是有区别的)
只能类.方法名直接调用。
python 会自动将类本身传给 cls,所有这个参数也不需要我们传值。
可以获取类属性,不能获取构造函数定义的变量
3.静态方法:@staticmethod
参数可以啥也没有
两种调用方法都可以
不需要使用任何类属性、构造函数定义的变量