我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python_面向对象笔记

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python_面向对象笔记

继承

什么是继承?
继承是一种新建类的方式,新建的类称为子类或派生类
父类又称为基类、超类

子类可以“遗传”父类的属性,从而可以减少代码冗余

如何寻找继承关系?
先抽象,再继承,继承描述的就是
一种父子关系 / 从属关系

继承的语法

class Foo1:
pass

class Foo2:
pass

class Bar(Foo1, Foo2):
pass

class Bar: # 在python3中没有继承任何类的类,默认继承object
pass

新式类与经典类

新式类与经典类:

新式类:继承object类的子类,以及该子类的子类。。。
在python3中全都是新式类

经典类:没有继承object的子类,以及该子类的子类。。。
只有在python2中才有经典类,在python2中没有继承任何类的子类不会
默认继承object类
class Foo(object):
pass


经典类与新式类的区别:在菱形继承上
经典类:深度优先查找
新式类:广度优先查找
Foo.mro()

在子类定义的方法中重用父类的功能:
方式一:与继承无关
指定道姓地调用某一个类的函数:
类名.函数名(对象,参数1,参数2,...)

方式二:严格依赖继承
super(自己的类名,self).绑定方法(参数1,参数2,。。。)

继承顺序

class A(object):
    def test(self):
        print('from A')

class B(A):
    def test(self):
        print('from B')

class C(A):
    def test(self):
        print('from C')

class D(B):
    def test(self):
        print('from D')

class E(C):
    def test(self):
        print('from E')

class F(D,E):
    # def test(self):
    #     print('from F')
    pass
f1=F()
f1.test()
print(F.__mro__) #只有新式才有这个属性可以查看线性列表,经典类没有这个属性

#新式类继承顺序:F->D->B->E->C->A
#经典类继承顺序:F->D->B->A->E->C
#python3中统一都是新式类
#pyhon2中才分新式类与经典类

如何查找继承关系

先抽象
    抽象对象之间相似之处得到了类
    再总结类与类之间的相似得到父类
再继承
    子类继承父类,子类可以遗传父类的属性

属性查找

obj.x
1、先从obj.__dict__
2、对象的类.__dict__
3、父类.__dict__
..........

派生

子类定义的名字会覆盖父类的同名属性
class Parent:
    x = 1

    def f1(self):
        print('from parent')


class Sub(Parent):
    z = 3

    def f1(self):
        # Parent.f1(self)
        super(Sub, self).f1()  # super会检索Sub.mro()
        print('from sub')

组合

作用:
    组合与继承的作用一样,都是用来减少类与类之间的重复代码

定义:
    A类的对象具备某一个属性,该属性的值是B类的对象
    基于这种方式就把A类与B类组合到一起
    对象既能使用A类中的数据与功能,也能使用B类中的数据与功能

封装

什么是封装?

封装(从字面意思理解)就是隐藏,隐藏指的是在类内部将一个属性藏起来
让类外部的使用者无法直接用到。在py中就是用__开头将一个属性藏起来.

补充说明:封装绝对不是单纯意义的隐藏
需知定义属性的目的就是为了让使用者去用,使用者要想使用类内部隐藏的属性
需要类的设计者在类内部开一个接口(定义一个方法),在该方法内访问隐藏的属性
,使用者以后就通过该方法来“间接地”访问内部隐藏的属性
作为类的设计者可以在接口之上附加任意逻辑从而严格控制类的使用者对属性的操作


class People:
def __init__(self, name):
self.__name = name

def tell_name(self):
# 添加逻辑
return self.__name


obj = People('egon')
# obj.__name
obj.tell_name()

封装函数属性: 隔离复杂度


class ATM:
def __card(self):
print('插卡')

def __auth(self):
print('用户认证')

def __input(self):
print('输入取款金额')

def __print_bill(self):
print('打印账单')

def __take_money(self):
print('取款')

def withdraw(self):
self.__card()
self.__auth()
self.__input()
self.__print_bill()
self.__take_money()

 封装之property

用来将类内的函数伪装成一个数据属性
class Foo:
    @property
    def name(self):
        pass

    @name.setter
    def name(self,value):
        pass

    @name.deleter
    def name(self):
        pass

obj=Foo()
obj.name
'''
BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解)

成人的BMI数值:
过轻:低于18.5
正常:18.5-23.9
过重:24-27
肥胖:28-32
非常肥胖, 高于32
  体质指数(BMI)=体重(kg)÷身高^2(m)
  EX:70kg÷(1.75×1.75)=22.86

'''

class People:
    def __init__(self, name, weight, height):
        self.name = name
        self.weight = weight
        self.height = height

    @property
    def bmi(self):
        return self.weight / (self.height * self.height)


carter = People('carter', 60, 1.75)

# print(carter.bmi())

print(carter.bmi)


# 属性修改

class People:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        print('您现在访问的是用户名...')
        return self.__name

    @name.setter  # 修改
    def name(self, x):
        print('已修改')
        self.__name =x

    @name.deleter  # 删除
    def name(self):
        print('已删除')
        del self.__name


obj = People('carter')

obj.name = 'QX'
print(obj.name)
# del obj.name
# print(obj.name)
BMI指数

classmethod与staticmethod区别

classmethod: 
  将类中的一个函数绑定给类

staticmethod:
  将类中的一个函数解除绑定
'''
1 绑定方法:
    在类内部定义的函数,默认就是给对象来用,而且是绑定给对象用的,称为对象的绑定方法
    绑定对象的方法特殊之处:
        应该由对象来调用,对象来调用,会自动将对象当作第一个参数传入

    绑定到类的方法特殊之处:
        应该由类来调用,类来调用,会自动将类当作第一个参数传入

'''
import settings

class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def tell(self):
        print('姓名: %s\n年龄: %s\n性别: %s' % (self.name, self.age,self.sex))

    @classmethod
    def from_conf(cls):
        return cls(settings.NAME, settings.AGE, settings.SEX)


p1 = People('carter', 20, 'male')
p1.tell()

p2 = People(settings.NAME, settings.AGE, settings.SEX)
p2.tell()

p3 = People.from_conf()
p3.tell()


'''
2.  staticmethod:非绑定方法,就是一个普通函数
    特性:既不跟类绑定,也不跟对象绑定,这意味着谁都能用
    谁来用都是一个普通函数,也就是说没有自动传值的特性了

'''

import settings
import hashlib
import time

class People:
    def __init__(self, name, age, sex):
        self.uid = self.create_id()
        self.name = name
        self.age = age
        self.sex = sex

    def tell(self):
        print('ID: %s\n姓名: %s\n年龄: %s\n性别: %s' % (self.uid, self.name, self.age,self.sex))

    @classmethod
    def from_conf(cls):
        return cls(settings.NAME, settings.AGE, settings.SEX)

    @staticmethod
    def create_id():
        m = hashlib.md5()
        m.update(str(time.perf_counter()).encode('UTF-8'))
        return m.hexdigest()


obj = People('carter', 18, 'male')
# print(obj.uid, obj.name, obj.age, obj.sex)
obj.tell()

print(obj.create_id())
print(People.create_id())
View Code

多态与多态性

多态:
    同一种事物有多种形态
    在程序中用继承可以表现出多态

多态性:
    可以在不考虑对象具体的类的情况下直接参考基类的标准使用对象

鸭子类型:

class Disk:
    def read(self):
        print('disk read')

    def write(self):
        print('disk write')


class Txt:
    def read(self):
        print('txt read')

    def write(self):
        print('txt write')


class Process:
    def read(self):
        print('process read')

    def write(self):
        print('process write')

obj1=Disk()
obj2=Txt()
obj3=Process()

obj1.read()
obj2.read()
obj3.read()

 

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python_面向对象笔记

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python_面向对象笔记

继承什么是继承?继承是一种新建类的方式,新建的类称为子类或派生类父类又称为基类、超类子类可以“遗传”父类的属性,从而可以减少代码冗余如何寻找继承关系?先抽象,再继承,继承描述的就是一种父子关系 / 从属关系继承的语法class Foo1:
2023-01-30

python_面向对象编程

初始面向对象一、类的实例化: 调用类产生对象的过程称为类的实例化, 实例化的结果是一个对象,或称为一个实例class People: def __init__(self, name, age, sex):
2023-01-30

js 面向对象学习笔记

这篇文章主要介绍了js 面向对象,需要的朋友可以参考下
2023-05-18

Python 3 学习笔记:面向对象编程

概述面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字符串
2023-01-31

python学习笔记:第16天 面向对象

目录 ⼀、类的成员介绍: 二、类的成员-变量 三、类的成员-方法 四、类的成员-属性 五、私有属性 ⼀、类的成员介绍:⾸先,
2023-01-30

python学习笔记:第17天 面向对象

一、类与类之间的依赖关系⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类中存在以下关系:依赖关系关联关系组合关系聚合
2023-01-30

PHP学习笔记:面向对象编程基础

导言:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程的思维方式,通过将问题分解为多个对象并定义对象之间的交互,来解决复杂的编程问题。PHP作为一门功能强大的编程语言,也支持面向对象编程。本文将介
2023-10-21

Python的面向对象编程方式学习笔记

类与实例 类与实例相互关联着:类是对象的定义,而实例是“真正的实物”,它存放了类中所定义的对象的具体信息。 下面的示例展示了如何创建一个类:class MyNewObjectType(bases):''' 创建 MyNewObjectTyp
2022-06-04

面向对象

面向对象特性 class  object封装、继承、多态语法:属性、方法构造函数(在实例化时做一些类的初始化的工作 该函数是用于传参数)析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作,如:关闭一些数据库链接,关闭打开的临时
2023-01-30

python 面向对象、类、对象

class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法inheritance 继承 python中通过类和对象来实现 面向对象的编程面向
2023-01-31

Python面向对象之面向对象基本概念

面向过程和面向对象概念过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。面向过程和面向对象 基本概念面向过程-怎么做把完成某一个需求的所有步骤从头到尾逐步实现;根据开发需求,将某些功能独立的代码封装成一个
2023-01-31

python - 面向对象

#python面向对象 - 类定义  注意:特殊方法"__init__"前后分别有两个下划线!!!   __init__方法可以理解成定义属性的方法,编辑器中会默认将属性都绑定到self中,在使用时直接self.shuxing 即可哟;  
2023-01-31

Python25 面向对象

该文章部分转载,部分原创引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角
2023-01-31

Python3 面向对象

Python3 面向对象python是一门面向对象语言,在python中有一句话:一切都是对象面向对象简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量:类变
2023-01-31

python面向对象

python面向对象目录:1.类的定义和使用2.类的封装3.类的继承4.多态 1.类的定义和使用查、增加、修改、删除、初始化方法、实例化__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用
2023-01-30

Python面向对象编程中关于类和方法的学习笔记

类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句”物以类聚”. 没错就是类, 归类 物以类聚 类其实就是把一些相同特性的事物归成一类, 比如人class P
2022-06-04

python3_07.面向对象

面向对象程序设计的基本步骤:    1、根据功能、抽象业务对象。    2、构建独立的业务模块,利用封装、继承、多态等抽象业务需求。    3、编写程序。    4、以对象为单位输入参数、开展测试。global关键字用来在函数或其他局部作用
2023-01-31

python 面向对象

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录