python----面对对象的特性
-
继承的概念
-
单继承
-
多继承
-
⼦类重写⽗类的同名属性和⽅法
-
⼦类调⽤⽗类的同名属性和⽅法
-
多层继承
-
-
私有属性和私有⽅法
继承的概念
Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法.
在Python中,所有类默认继承object类,object类是顶级类或基类;其他⼦类叫做派⽣类。
单继承
class func1(object):
def __init__(self):
self.num = 100
self.car = "Benz"
def demo(self):
print(self.num)
class func2(func1):
pass
result = func2()
result.demo()
print(result.car)
多继承
class Master_Zhang(object):
def __init__(self):
self.z_func = "数学"
def zhang(self):
print(f"张老师教的课程是{self.z_func}")
class Master_Li(object):
def __init__(self):
self.l_func = "英语"
def li(self):
print(f"李老师教的课程是{self.l_func}")
class Student_Wang(Master_Zhang, Master_Li):
def __init__(self):
Master_Zhang.__init__(self)
Master_Li.__init__(self)
result = Student_Wang()
print(result.z_func)
result.zhang()
print(result.l_func)
result.li()
子类重写父类方法和属性
class Master_Zhang(object):
def __init__(self):
self.z_func = "数学"
def zhang(self):
print(f"张老师教的课程是{self.z_func}")
class Master_Li(object):
def __init__(self):
self.l_func = "英语"
def li(self):
print(f"李老师教的课程是{self.l_func}")
class Student_Wang(Master_Zhang, Master_Li):
def __init__(self):
self.z_func = "奥数竞赛"
self.l_func = "雅思考试"
def wang(self):
print(f"王自学了{self.z_func}和{self.z_func}")
result = Student_Wang()
print(result.z_func)
result.zhang()
子类调用父类方法和属性及多继承
class Master_Zhang(object):
def __init__(self):
self.z_func = "数学"
def zhang(self):
print(f"张老师教的课程是{self.z_func}")
class Master_Li(object):
def __init__(self):
self.l_func = "英语"
def li(self):
print(f"李老师教的课程是{self.l_func}")
class Student_Wang(Master_Zhang, Master_Li):
def __init__(self):
self.z_func = "奥数竞赛"
self.l_func = "雅思考试"
def wang(self):
print(f"王自学了{self.z_func}和{self.z_func}")
def demo_wang_zhang(self):
Master_Zhang.__init__(self)
Master_Zhang.zhang(self)
def demo_wang_li(self):
Master_Li.__init__(self)
Master_Li.li(self)
class Student_Xiaoxia(Student_Wang):
pass
result = Student_Xiaoxia()
print(result.z_func)
result.wang()
result.demo_wang_zhang()
result.demo_wang_li()
Super()
class Master_Li(object):
def __init__(self):
self.l_func = "英语"
def li(self):
print(f"李老师教的课程是{self.l_func}")
class Student_Wang( Master_Li):
def __init__(self):
super().__init__()
print(self.l_func)
self.li()
func = Student_Wang()
私有属性和私有方法
在Python中,可以为实例属性和⽅法设置私有权限,即设置某个实例属性或实例⽅法不继承给⼦类。
在本类内可以调用和获取私有属性
class Master_Li(object):
def __init__(self):
self.l_func = "英语"
# 私有属性 不可被继承
self.__func1 = "国际象棋"
# 私有方法 不可被使用
def __swimming(self):
print(f"李老师还会游泳")
class Student_Wang(Master_Li):
def __init__(self):
super().__init__()
func = Student_Wang()
print(func.l_func)
# print(func.__func1)
# func.__swimming
-
封装 将属性和⽅法书写到类的⾥⾯的操作即为封装 封装可以为属性和⽅法添加私有权限
-
继承 ⼦类默认继承⽗类的所有属性和⽅法 ⼦类可以重写⽗类属性和⽅法
-
多态 传⼊不同的对象,产⽣不同的结果
多态
多态指的是⼀类事物有多种形态
定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果
-
好处:调⽤灵活,有了多态,更容易编写出通⽤的代码,做出通⽤的编程,以适应需求的不断变化!
-
实现步骤:
定义⽗类,并提供公共⽅法
定义⼦类,并重写⽗类⽅法
传递⼦类对象给调⽤者,可以看到不同⼦类执⾏效果不同
class General(object):
def func(self):
print("下达命令,出兵作战")
class Captain1(General):
def func(self):
print("正面出击")
class Captain2(General):
def func(self):
print("侧面偷袭")
class Main(object):
def fight(self, demo):
demo.func()
demo1 = Captain1()
demo2 = Captain2()
main = Main()
main.fight(demo1)
main.fight(demo2)
类方法和静态方法
了解即可
class Demo(object):
__num = 10
@classmethod
def get__num(cls):
return cls.__num
func = Demo()
print(func.get__num())
静态方法
当⽅法中 既不需要使⽤实例对象(如实例对象,实例属性),也不需要使⽤类对象 (如类属性、类⽅法、创建实例等)时,定义静态⽅法
取消不需要的参数传递,有利于 减少不必要的内存占⽤和性能消耗
class Demo(object):
@staticmethod
def get_info():
print("我是一个静态方法")
func = Demo()
func.get_info()

浙公网安备 33010602011771号