定义
1、必须使用class关键字
2、类名必须使用大驼峰命名
3、类定义完成后就产生了一个类对象,绑定到了标识符ClassName上
类对象及类属性
- 类对象,类定义就会生成一个类对象
- 类的属性,类定义的变量和类中定义的方法都是类的属性
- 类变量,上例中x是类MyClass的变量
- foo是方法对象Method,不是普通的函数对象function,它一般至少有一个参数,第一个参数可以是self(self只是个惯用标识符,可以换名字),这个参数位置就留给了self。
self指代当前实例本身
实例化
每次实例化后获得的实例,是不同的实例,即使是同样的参数实例化,也得到不一样的对象。
Python类实例化后,会自动调用init方法,这个方法第一个参数必须留给self,其他参数随意。
init 方法
MyClass()实际上调用的是init(self) 方法,可以不定义,如果没有定义会在实例化后隐式调用
作用:对实例进行初始化
初始化函数可以接受多个参数,请注意第一个位置必须是self,例如init(self,name, age )
注意:init() 方法不能有返回值,也就是只能是return None
实例对象 instance
类实例化后一定会获得一个对象,就是实例对象
init 方法的第一参数self就是指代某一个实例。
类实例化后,得到一个实例对象,实例对象会绑定方法,调用方法是采用jerry.showage()的方式。
self就是jerry,Python会把方法的调用这作为第一个参数self的实参传入。
self.name 就是jerry对象的name,name保存在了jerry对象上,而不是Person类上,所以称为实例变量。
self
上例说明,self就是调用者,就是c对应的实例对象。
self 这个名字只是一个惯例,它可以修改,但是请不要修改,否则影响代码的可读性。
实例变量和类变量
实例变量是每一个实例自己的变量,是自己独有的;类变量是类的变量,是类所有实例共享的属性和方法。
注意:Python中每一种对象都拥有不同的属性。函数、类都是对象,类的实例也是对象。
总结
是类的,也是这个类所有实例的,其实实例都可以访问到;是实例的,就是这个实例自己的,通过类访问不到,类变量是属于类的变量,这个类的所有实例可以共享这个变量。
对象可以动态的给自己在增加一个属性,实例.dict[变量名]和实例.变量名都可以访问到,实例的同名变量会隐藏掉类变量,或者说覆盖了这个类变量。
实例属性的查找顺序
指的就是实例使用 .点号来访问属性,会先找自己的dict ,如果没有,然后通过属性class找到自己的类,再去类的dict中找。
注意,如果实例使用dict[变量名] 访问变量,将不会按照上面的查找顺序找变量,这是指明使用字典的key查找,不是属性查找。