1.定义类,实例化对象:
class Nanny(object): #class 定义一个类名Nanny,这个类继承了object
def __init__(self,name,age): #__init__初始化方法,在创建对象的时候自动调用,第一个参数是必须有的self指的是创建的对象,
self.name = name
self.age = age
def cook(self): #在类中的普通函数叫做方法;都有一个self参数;可以被创建的对象调用
print("这是一个做饭的过程")
obj1 = Nanny("小红",22) #创建一个obj1对象,传入参数;这个参数被传入__init__初始化方法中
print(obj1.name)
print(obj1.age)
obj1.cook() #调用类中的方法
2类中的方法(普通方法(实例化方法),类方法,静态方法)和 类属性
class Nanny(object):
Nanny_name = "this is Nanny name" #这是一个类属性,可以通过类型.调用
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod #这是一个类方法;通过@classmethod
def cook1(cls): #方法的参数是cls 代表的这个类
print("我是一个类方法")
@staticmethod #这是一个静态方法,通过@staticmethod
def cook2(): #方法里面可以没有参数
print("我是一个静态方法:这是我的使用说明")
def cook(self):
print("这是一个做饭的过程")
obj1 = Nanny("小红",22)
print(obj1.name)
print(obj1.age)
#方法的调用,实例化的对象可以调用类中的所有方法
obj1.cook()
obj1.cook1()
obj1.cook2()
#但是类名只能调用静态方法和类方法
Nanny.cook1()
Nanny.cook2()
3继承
何为继承,继承既新建的类具有被继承类的属性和方法;继承的目的是为了减少不必要的代码,实现代码的重复利用。那如何实现继承呢看代码:
class Parsenclass1(object): #定义一个类让这个类继承object(python3中默认继承object;python2中需要指定)
Parsen_var = "this is parsen var"
def __init__(self):
print("111")
def f1(self):
print("这是Parsenclass1的f1")
def f2(self):
print("这是Parsenclass1的f2")
def f3(self):
print("这是Parsenclass1的f3")
def f4(self):
print("这是Parsenclass1的f4")
class son1(Parsenclass1): #定义一个son1类,让这个类继承 Parsenclass1;那么这个类型具有父类中的所有属性和方法(除去私有的,暂时不表,后面介绍)
son1_var = "son1关键字"
def __init__(self):
print("这是son1")
def f1(self):
print("这是son2的f1")
def f2(self):
print("这是son1的f2")
self.f1()
class son2(Parsenclass1): #定义一个son2,和son1的父类一样
son2_var = "这是son2关键字"
def __init__(self):
print("这是son2")
def f1(self):
print("这是son2的f1")
def f2(self):
print("这是son2的f2")
def f3(self):
print("这是son2的f3")
class son_son(son1,son2): #定义一个son_son类,继承son1和son2;这是个多继承
son_son_var = "这是son_son的关键字"
def __init__(self):
print("这是son_son")
def f1(self):
print("这是son_son的f1")
obj1 = son_son() #创建对象
obj1.f2() # 调用f2()函数
obj1.f3()
obj1.f4()
print(son_son.__bases__)
执行结果如下:
这是son_son #__init__函数默认执行
这是son1的f2 #当执行f2方法时,现在创造该对象的类中寻找,如果找到了就执行,如果没有找到则会向父类中寻找;这个父类时son1和son2,先在son1中寻找;找到了执行f2();当执行f2()函数的时候遇到了
self.f1()函数,那这个f1函数指向的又是谁呢;创建类的时候self代表的是实例化对象(obj1),所以先去创建这个对象的类(son_son)中寻找f1函数;
这是son_son的f1
这是son2的f3 #当调用f3的时候,son1中没有f3函数;那么这个时候是继续沿着son1的父类中寻找还是去son2中寻找呢;看结果这个是先到son2中寻找f3函数(新式类中寻找父类的方法是从左到右,广度优先)
这是Parsenclass1的f4 #调用f4的时候先去son_son类中找,没有找到再去son1和son2中依次寻找,也没有找到最后去了Parsenclass1中寻找
(<class '__main__.son1'>, <class '__main__.son2'>) #类.__bases__ 显示该类的父类