第四节 Python基础-面向对象
类的创建
- 类的定义:用来描述具有共同的属性和方法的对象集合。
- 类的声明格式:
例:定义一个人类,有姓名和年龄两个属性,有自我介绍这一个动作(方法)class 类名(): 属性1 = 属性值; __属性2 = 属性值; #定义私有属性,只能在类内部使用"self.__属性2"访问 ... def 方法1(self): 语句1; ... def __方法2(self): #定义私有方法,只能在类内部使用"self.__方法2()"访问 语句1; ... ...
class Person(): name = "" age = 0 def show(self): #self代表当前实例对象的地址 print("我叫{0},我今年{1}岁了".format(self.name,self.age)) return None
- 如果没有指定继承的话,类名后面的()可以省略
- 方法的定义:
- 定义方法时必须传入默认参数self,且放在首位----与普通函数唯一的区别
- 方法内如果调用类变量,只需要在调用处使用"self.变量"
- 方法需要传入参数,则需要在声明时设置形参,调用处直接写上名称即可
类的实例
- 实例化类对象,例:x = Person()
- 设置/修改对象的属性,例:x.name = “小明” \ x.age = 19
- 调用对象方法,例:x.show()
- 在定义时传入的self在调用时不写
- 如果定义的时候设置了形参,例:def getInfo(self,a,b):
则调用时需要传入实参,例:x.getInfo(“小明”,19)
构造方法
- 类都有一个默认的特殊方法__init__(self) ,在实例化对象的时候都会自动调用
- 在定义类的时候可以再次定义此方法,例:
def __init__(self): print("构造方法被自动调用了") #此时,每实例化一个对象就会执行一次该语句 return None
- 构造方法可以设置参数,参数传入到实例化对象上,例:
此时,实例化对象的时候必须传入参数,例:y = Person(“小红”,17)def __init__(self,name,age): self.name = name self.age = age return None
继承
- 描述:当子类继承父类后,子类获得父类除私有外的所有属性和方法
- 方法重写:如果父类方法不能满足需求,可以在子类里面重写父类的方法
- 使用:定义子类的时候将父类名写在子类名后面的()内,例:
class Man(Person): gender = "男人" def tell(self): print("我是男人!") return None
- 多继承:Python允许多继承,将需要继承的父类置于()内,用逗号隔开即可
- 当继承的父类有相同的方法时,优先继承左边的
关于继承的范例:class Person(): #定义一个Person类 name = "" age = 0 def __init__(self,name,age): self.name = name self.age = age return None def show(self): print("我叫{0},我今年{1}岁了".format(self.name,self.age)) return None class Student(): #定义一个Student类 school = "" grade = "" def __init__(self,school,grade): self.school = school self.grade = grade return None def show(self): print("我在{0}读书,现在是{1}。".format(self.school,self.grade)) return None #单继承范例 class Man(Person): #定义一个Man类,继承Person类 gender = "男人" def __init__(self,name,age): Person.__init__(self,name,age); #调用父类构造方法 return None def show(self): #覆写父类的show()方法 print("我是男人!") return None #多继承范例 class Demo(Student,Man): #定义一个Demo类,继承Student类和Man类 a = "" def __init__(self,name,age,school,grade): Student.__init__(self,school,grade) #调用父类Student的构造方法 Man.__init__(self,name,age) #调用父类Man的构造方法 return None #实例化一个Demo类对象 x = Demo("孙悟空",500,"方寸山斜月三星洞","三年级") x.show() #两个父类都有此方法,但由于Student类在左边,所以此处调用Student类的show()方法