返回顶部
首页 > 资讯 > 后端开发 > Python >python_面向对象笔记
  • 154
分享到

python_面向对象笔记

面向对象笔记 2023-01-30 23:01:00 154人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

继承

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

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

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

继承的语法

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

 

 

 

--结束END--

本文标题: python_面向对象笔记

本文链接: https://lsjlt.com/news/181091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python_面向对象笔记
    继承 什么是继承? 继承是一种新建类的方式,新建的类称为子类或派生类父类又称为基类、超类子类可以“遗传”父类的属性,从而可以减少代码冗余如何寻找继承关系?先抽象,再继承,继承描述的就是一种父子关系 / 从属关系继承的语法class Fo...
    99+
    2023-01-30
    面向对象 笔记
  • python_面向对象编程
    初始面向对象 一、类的实例化: 调用类产生对象的过程称为类的实例化, 实例化的结果是一个对象,或称为一个实例 class People: def __init__(self, name, age, sex)...
    99+
    2023-01-30
    面向对象
  • js 面向对象学习笔记
    目录数据赋值拷贝值类型赋值--函数形参&实参引用类型赋值对象的动态性delete删除属性数据赋值拷贝 1、值得赋值是独立的 num1=12; num1=num2 将存储值赋值...
    99+
    2023-05-18
    js 面向对象
  • python学习笔记:第16天 面向对象
    目录 ⼀、类的成员介绍: 二、类的成员-变量 三、类的成员-方法 四、类的成员-属性 五、私有属性 ...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • python学习笔记:第17天 面向对象
    一、类与类之间的依赖关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 中存在以下关系: 依赖关系 关联关系...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • Python 3 学习笔记:面向对象编程
    概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字...
    99+
    2023-01-31
    面向对象 学习笔记 Python
  • PHP学习笔记:面向对象编程基础
    导言:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程的思维方式,通过将问题分解为多个对象并定义对象之间的交互,来解决复杂的编程问题。PHP作为一门功能强大的编程语言,也支持面向对象编程。本文将介...
    99+
    2023-10-21
    PHP 基础 面向对象编程(OOP)
  • Python的面向对象编程方式学习笔记
    类与实例 类与实例相互关联着:类是对象的定义,而实例是“真正的实物”,它存放了类中所定义的对象的具体信息。 下面的示例展示了如何创建一个类: class MyNewObjectType(bases): ...
    99+
    2022-06-04
    面向对象 学习笔记 方式
  • Java学习笔记之面向对象编程精解
    目录包继承super 关键字finalprotected关键字组合多态抽象类接口面向对象编程(包、继承、组合、多态 、抽象类、接口) 包 包其实就是类的集合,其本质上其实就是一个文件...
    99+
    2024-04-02
  • PHP面向对象02:面向对象高级
    PHP面向对象02:面向对象高级 一、设计模式1. 单例模式2. 工厂模式 二、面向对象三大特性1. 封装2. 继承3. 多态 三、继承1. 实现继承2. 有限继承a. 属性都能继承b...
    99+
    2023-09-01
    php 单例模式 开发语言
  • Python_对象(实例)
    1.实例化过程对象就是类实例化的结果,我们可以模仿函数的调用方式来进行实例化的过程,如下图所示:可以发现,函数是函数名(实参1,实参2,...),而实例化是类名(self,参数1,参数2,...),实例化的过程看下图:可以发现在实例化的过程...
    99+
    2023-01-31
    实例 对象
  • 面向对象
    面向对象 特性 class  object 封装、继承、多态 语法:属性、方法 构造函数(在实例化时做一些类的初始化的工作 该函数是用于传参数) 析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作,如:关闭一些数据库链接,关...
    99+
    2023-01-30
    面向对象
  • python 面向对象、类、对象
    class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法 inheritance 继承 python中通过类和对象来实现 ...
    99+
    2023-01-31
    面向对象 对象 python
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • python_笔记3_list列表(有序
    按照索引访问list list_name = ['zys','vart','sdf'] print list_name[0] print list_name[-1] print list_name[:-1] print list_nam...
    99+
    2023-01-31
    笔记 列表 _list
  • python 面向对象
    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序...
    99+
    2023-01-30
    面向对象 python
  • python面向对象
    python面向对象 目录: 1.类的定义和使用 2.类的封装 3.类的继承 4.多态   1.类的定义和使用 查、增加、修改、删除、初始化方法、实例化 __init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这...
    99+
    2023-01-30
    面向对象 python
  • Python|面向对象
    #一、类、对象定义及使用 #定义类语法:class 类名(父类):代码块注意:()可有可无 #class Student: #class Student(): #创建对象(实例)语法:对象名=类名() 注意:Java语言在实例化对...
    99+
    2023-01-30
    面向对象 Python
  • python - 面向对象
    #python面向对象 - 类定义   注意:特殊方法"__init__"前后分别有两个下划线!!!   __init__方法可以理解成定义属性的方法,编辑器中会默认将属性都绑定到self中,在使用时直接self.shuxing 即可哟;...
    99+
    2023-01-31
    面向对象 python
  • Python3 面向对象
    Python3 面向对象 python是一门面向对象语言,在python中有一句话:一切都是对象 面向对象简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 ...
    99+
    2023-01-31
    面向对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作