一.面向过程是⼀种“执行者思维",解决简单问题可以使用面向过程(自己做事)
面向对象是⼀种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象(安 排别人做事)
二.类与对象:
类是对一类事物的描述,它定义了该事物的属性(状态)和行为(方法)
对象:类的实例,是类的具体实现。包含了类的属性值和方法代码,可以直接访问和操作
__init__方法的注意事项:
1.如果实例化对象时没有传入参数,则默认调用无参构造方法__init__ 2.如果实例化对象时传入参数,则调用有参构造方法 3.如果手动创建有参构造方法__init__,则实例化对象时必须传入参数
class Student:
name = "李四"
age = 19
gender = "男" #以上三个是类属性,如果按这样的方式定义,那么这
些属性就全都是固定的,所以不推荐使用
#所以推荐使用“构造方法”来定义属性,即__init__() ⽅法:初始化创建好的对象
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
#定义方法
def study(self):
print(self.name + "正在学习...")
def classing(self):
print(self.name + "正在上课...")
s1 = Student("张三", 18,"男") # 实例化对象,并传⼊参数
s1.study()
s1.classing()
三.Python是⾯向对象的语⾔,⽀持⾯向对象编程的三⼤特性:继承、封装(隐藏)、多态。
1.封装:
私有属性写法:__类属性名
私有方法写法:__方法名(self)
如果想打印私有属性和私有方法,可以使用以下方法打印
# 打印私有属性: 对象._类名__私有属性名 # print(t1._Teacher__school) # 调用私有方法: 对象._类名__私有方法名 # print(t1._Teacher__show_salary)
如果想打印对象所有属性和方法,可以使用dir( )关键字,例如:
print(dir(t1)) #打印对象所有属性和方法
class Teacher:
__school = "文理学院" #私有成员属性,只能在类内部访问
def __init__(self,name,age,salary):
self.name = name
self.age = age
self.__salary = salary #私有属性
def show_school(self):
print(self.__school) #访问私有属性
def __show_salary(self): #私有方法
print(self.__salary)
#实例化对象
t1 = Teacher("张三",19,2000)
t1.show_school() #可以访问__school
# print(t1.__school) #不能在类外访问
# t1.__show_salary() #不能在类外调用私有方法
2.继承:
格式:class 子类(父类):
注意:必须要同类型才能使用“+”号,如果要调用父类的构造函数,要使用下面的关键字
super()
1.
⼦类不重写 __init__ ,实例化⼦类时,会⾃动调⽤⽗类定义的 __init__ 。
2.
⼦类重写了 __init__ 时,实例化⼦类,就不会调⽤⽗类已经定义的 __init__
3.
如果重写了 __init__ 时,要使⽤⽗类的构造⽅法,可以使⽤ super 关键字
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def say_hello(Self):
print("Hello")
class Student(Person):
def __init__(self,name,age,grade):
self.grade = grade
super().__init__(name,age) #调用父类的构造函数,
super()-->指代父类对象
def study(self):
print(self.name + "studying" + str(self.grade))
stu1 = Student("张三",23,89)
print(stu1.name,stu1.age)
stu1.study()
stu1.say_hello()
3.多层继承和多重继承:
多层继承:
A类继承B类,B类继承C类(推荐使用)
class A: pass # 定义⼀个空类A,不继承任何类
class B(A): pass # B继承A
class C(B): pass # C继承B
多重继承:(不推荐使用)
class A: # 定义⼀个类A
def aa(self):
print("aa")
class B: # 定义⼀个类B
def bb(self):
print("bb")
class C(B, A): # 定义⼀个类C,继承了A和B两个类
def cc(self):
print("cc")
4.多态:是指同⼀个⽅法调⽤由于对象不同可能会产⽣不同的⾏为。
class Animal: # 定义⼀个动物类:⽗类
def shout(self): # 定义⼀个shout⽅法
print("动物叫了⼀声")
class Dog(Animal): # 定义⼀个狗类:⼦类
def shout(self): # 重写⽗类的shout⽅法
print("⼩狗,汪汪汪")
class Cat(Animal): # 定义⼀个猫类:⼦类
def shout(self): # 重写⽗类的shout⽅法
print("⼩猫,喵喵喵")
def animalShout(a):
a.shout() # 传⼊的对象不同,shout⽅法对应的实际⾏为也不同。
animalShout(Dog()) # 传⼊⼀个Dog类的对象
animalShout(Cat()) # 传⼊⼀个Cat类的对象