python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)

简介: ## 封装,继承和多态## 1.封装1、满足把内容封装到某个地方,另一个地方去调用封装的内容2、使用初始化构造方法,或者使用self获取封装的内容## 2.继承子类继承父类的属性和内容

1.单继承



## 封装,继承和多态

## 1.封装


1、满足把内容封装到某个地方,另一个地方去调用封装的内容

2、使用初始化构造方法,或者使用self获取封装的内容


## 2.继承


子类继承父类的属性和内容


1.1单继承示例


class Animal:
    def eat(self):
        print('吃饭了')
        pass
    def drink(self):
        print('喝水了')
        pass
class Dog(Animal):
    def wwj(self):
        ## 子类独有的实现
        print('小狗汪汪叫')
        pass
class Cat(Animal):
    def mmj(self):
        ## 子类独有的实现
        print('小猫喵喵叫')
        pass
d1 = Dog()
d1.eat()
d2 = Cat()
d2.eat()


## 总结:所以对于面向对象的继承来说,可以极大的提升效率,减少重复代码


2.多继承


class Shenxian:
    def fly(self):
        print('神仙会飞')
    pass
class Monkey:
    def chitao(self):
        print('猴子喜欢吃桃')
    pass
class Sunwukong(Shenxian,Monkey):
    pass
swk = Sunwukong()
swk.fly()
swk.chitao()


2.1 注意方法重名:


## 多个父类存在相同的方法,该调用哪一个

class D(object):
    def eat(self):
        print('D.eat')
    pass
class C(object):
    def eat(self):
        print('C.eat')
    pass
class B(D):
    pass
class A(B,C):
    pass
a = A()
a.eat
print(A.__mro__) ##显示类的继承顺序
<class '__main__.A'>,
<class '__main__.B'>,
<class '__main__.D'>,
<class '__main__.C'>,
<class 'object'>


## 执行顺序应该是 去A里面查找,找第一个父类,A中没有的话,去B中查找,,B类中没有,C类中没有,去D类中查找;


2.2案例 简洁继承


class D(object):
    def eat(self):
        print('D.eat')
    pass
class C(object):
    def eat(self):
        print('C.eat')
    pass
class B(D):
    pass
class A(B,C):
    pass
a = A()
a.eat
print(A.__mro__) ##显示类的继承顺序
<class '__main__.A'>,
<class '__main__.B'>,
<class '__main__.D'>,
<class '__main__.C'>,
<class 'object'>


2.3重写父类方法


class Grandfather():
    def eat(self):
        print('吃的方法')
        pass
    pass
class Father(Grandfather):
    ## 覆盖了父类的方法
    def eat(self):
        print('爸爸经常吃海鲜')
    pass
class Son(Father):
    pass
son = Son()
print(Son.__mro__)


## 定义跟父类相同的方法,可以实现覆盖和重写父类的方法


2.4重写初始化方法


class Grandfather():
    def __init__(self,name):
        self.name = name
        pass
    def eat(self):
        print('吃的方法')
        pass
    pass
class Father(Grandfather):
    def __init__(self):
        pass
    ## 覆盖了父类的方法
    def eat(self):
        print('爸爸经常吃海鲜')
    pass
class Son(Father):
    pass
son = Son()
print(Son.__mro__)


2.5调用父类初始化方法


class Father:
    def __init__(self,name):
        self.name = name
        pass
    ## 覆盖了父类的方法
    def eat(self):
        print('爸爸经常吃海鲜')
    pass
class Son(Father):
    def __init__(self,name):
        Father.__init__(self,name) ##调用父类的方法,可以具备name属性
        ## 或者
        ## super.__init__(name) ##也可以这样写
        self.age = 90 ## 添加新的实例方法
        self.sex = '男'
        pass
    pass
son = Son('hello')


2.6 调用父类的方法


class Father:
    def __init__(self,name):
        self.name = name
        pass
    ## 覆盖了父类的方法
    def eat(self):
        print('父类的吃方法')
    pass
class Son(Father):
    def __init__(self,name):
        Father.__init__(self,name) ##调用父类的方法,可以具备name属性
        ## 或者
        ## super.__init__(name) ##也可以这样写
        self.age = 90 ## 添加新的实例方法
        self.sex = '男'
        pass
    pass
    def __str__(self):
        print('{}'.format(self.name))
        pass
    def eat(self):
        super().eat() ##调用父类的方法
        print('子类的吃方法')
        pass
son = Son('詹躲躲')
son.eat()
## 父类的吃方法
## 子类的吃方法


3 多态



同一种行为,对于不同子类【对象】有不同的实现方式


3.1 要想实现多态,必须有两个前提


1.继承:发生在父类和子类之间

2.重写:子类重写父类的方法

3.1 案例演示

class Animal:
    ## 基本类
    def say(self):
        print('动物类')
        pass
    pass
class Duck(Animal):
    ## 子类 派生类
    def say(self):
        print('鸭子类')
        pass
    pass
class Dog(Animal):
    ## 子类 派生类
    def say(self):
        print('小狗类')
        pass
    pass
## duck1 = Duck()
## duck1.say()
## dog = Dog()
## dog.say()
def commonIvoke(obj):
    ## 统一调用
    obj.say()
## 循环统一调用
listObj = [Duck(),Dog()]
for item in listObj:
    commonIvoke(item)
## 在定义时的类型跟调用时不一样的时候,称为多态。


3.2 多态的好处


1.增加程序的灵活性

2.增加程序的扩展性


4.类属性和实例属性



class Animal:
    ## 基本类
    def say(self):
        print('动物类')
        pass
    pass
class Duck(Animal):
    ## 子类 派生类
    def say(self):
        print('鸭子类')
        pass
    pass
class Dog(Animal):
    ## 子类 派生类
    def say(self):
        print('小狗类')
        pass
    pass
## duck1 = Duck()
## duck1.say()
## dog = Dog()
## dog.say()
def commonIvoke(obj):
    ## 统一调用
    obj.say()
## 循环统一调用
listObj = [Duck(),Dog()]
for item in listObj:
    commonIvoke(item)
## 在定义时的类型跟调用时不一样的时候,称为多态。


5.类属性和静态方法


class Animal:
    ## 基本类
    def say(self):
        print('动物类')
        pass
    pass
class Duck(Animal):
    ## 子类 派生类
    def say(self):
        print('鸭子类')
        pass
    pass
class Dog(Animal):
    ## 子类 派生类
    def say(self):
        print('小狗类')
        pass
    pass
## duck1 = Duck()
## duck1.say()
## dog = Dog()
## dog.say()
def commonIvoke(obj):
    ## 统一调用
    obj.say()
## 循环统一调用
listObj = [Duck(),Dog()]
for item in listObj:
    commonIvoke(item)
## 在定义时的类型跟调用时不一样的时候,称为多态。


5.1 静态方法


class Person:
    country = 'china'
    ## 类方法 用classmethod修饰
    @classmethod
    def get_country(cls):
        return cls.country ## 访问类属性
        pass
    @classmethod
    def change_country(cls):
        cls.country = 'America'
        pass
    @staticmethod
    def get_data():
         return Person.country
    pass
## 通过类对象去引用
print(Person.get_country())
print(Person.change_country())
print(Person.get_country())
print(Person.get_data())

一般不会通过是实例对象去访问静态方法


由于静态方法主要存放逻辑方法,本身与类以及实例没有交互,也就是不会涉及类中方法和属性的操作


根据资源能够有效的利用


5.2求系统当前的时间


import time
class sys_time:
    def __init__(self,hour,min,second):
        self.hour = hour
        self.min  =min
        self.second = second
    @staticmethod
    ## 独立的功能
    def show_time():
        return time.strftime('%H:%M:%S',time.localtime())
print(sys_time.show_time())
## 15:15:44


5.3 总结


1.类方法的第一个参数是类对象,cls进而去引用类对象的属性和方法


2.实例方法的第一个参数是实例属性,若存在相同的实例属性或者方法,实例属性优先级最高


3.静态方法不需要额外的参数,若需要引用属性。,则可以通过类对象或者实例对象去引用即可,必须使用装饰器@staticmethod装饰



相关文章
|
23天前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
43 3
|
11天前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
18天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
84 5
|
数据库 Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(下)
## 封装,继承和多态 ## 1.封装 1、满足把内容封装到某个地方,另一个地方去调用封装的内容 2、使用初始化构造方法,或者使用self获取封装的内容 ## 2.继承 子类继承父类的属性和内容
163 0
|
15天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
14天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
97 80
|
21天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
133 59
|
1天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
13 2
|
14天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
40 10