object类是一个超类,是所有类的父类。 pass表示类里面什么都不没有是个空类。
类拥有3种行为2种属性: ①静态方法 ②类方法 ③实例方法。 ①类属性 ②实例属性。
实例对象可以调用这3种方法,类名则不能调用实例方法。
类定义:类名首字母必须大写,
# coding=utf-8 class A: # 第一种简写方式 pass class B(object): # 第二种方式()里面写上继承的父类,默认写上object pass
静态方法:需要用@staticmethod修饰,使用类名调用。和类方法区别在于不能使用cls。
# coding=utf-8 class A(object): @staticmethod # 静态方式必须用static修饰 def fun1(): # 函数定义 print("类里面的静态方法") A.fun1()
类方法:需要用@classmethod修饰,使用类名调用。cls可以访问类的所有属性,cls看做类方法的额外属性。
# coding=utf-8 class A(object): @classmethod def fun1(cls): print("类方法") A.fun1()
实例方法:必须有一个额外的参数,一般为self可以修改但不推荐,代表类的实例,self可以访问当前实例的所有属性。实例方法只能使用对象调用。
# coding=utf-8 class A(object): def fun1(self): print("实例方法") a = A() # 创建实例对象 a.fun1()
类属性: 直接定义在类里面的属性或者使用cls动态添加的属性。类属性被所有实例共享。实例修改类属性,只不过是创建了一个同名的实例属性,没有真正修改类属性。
class A(object): a = 10 # 直接定义在类里面
实例属性:每个实例单独存在的属性。①在类的构造函数里面定义。②在实例中创建。
# coding=utf-8 class A(object): def __init__(self): # self代表当前实例 self.a = 10 # 第一种定义实例属性 print("构造函数") s = A() s.b = 20 # 第二种定义实例属性 print(s.a, s.b)
构造函数:前后__init__双下划线。创建对象时候会自动调用构造函数,如果没有声明构造函数,会自动调用父类构造函数,其他情况下都不会调用父类构造函数,即使是继承。构造函数属于实例方法。
# coding=utf-8 class A(object): def __init__(self): # 构造函数 print("构造函数") a = A() # 创建对象
创建对象:对象名 = 类名(),当类的构造函数,有形参时,需要传递实参,self这个额外参数忽略看做this即可。
a = A() # 创建对象 a是变量 A是类名
继承:如果实例化子类对象时候,子类没有提供构造函数就会自动调用父类的构造函数。子类一般情况下不会自动调用父类的构造函数,需要手动调用,子类调用父类,①直接使用类名调用②super关键字调用。python不存在二义性问题,使用的就近原则。issubclass()函数判断一个类是不是另一个类的子类。
类的私有属性:类的私有属性使用双下划线_ _开头。不能直接用类名访问(系统就是把下划线开头的变量名字改变了,所以访问不了,可以使用另一种方式访问,就用它改变后的名字)。