python----面对对象的特性

  • 继承的概念

  • 单继承

  • 多继承

  • ⼦类重写⽗类的同名属性和⽅法

  • ⼦类调⽤⽗类的同名属性和⽅法

  • 多层继承

  • super()

  • 私有属性和私有⽅法

继承的概念

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)

 

类方法和静态方法

了解即可

需要⽤装饰器 @classmethod 来标识其为类⽅法,对于类⽅法,第⼀个参数必须是类对象,⼀般以cls 作为第⼀个参数。

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()

 

 

posted @ 2023-02-03 10:32  Cenb  阅读(27)  评论(0)    收藏  举报