Python_day_07_面向对象编程

Python学习DAY06_面向对象编程_基础 在 Python 中可以使用 class 关键字定义类,然后在类中通过之前学习过的函数来定义方法,这样就可以将对象的动态特征描述出来。# __init__是一个特殊方法用于在创建对象时进行初始化操作# 通过这个方法我们可以为学生对象绑定name和age两个属性print('%s正在学习%s.' % (self.name, course_name))# PEP 8要求标识符的名字用全小写多个单词用下划线连接# 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识) 阅读详情

面向过程:
面向函数:
面向对象:

1.定义一个类

def 函数名 ( 形参 ):
    函数执行的内容
类的格式
class 类名 ( 父类 ):
    类的内容

类名后面有括号的类,称为新式类;
括号里面的内容是父类的名称;程序中,所有类的父类都是 object;

class Animals(object):
    pass
print Animals
结果为
<class '__main__.Animals'>

2.类的数据属性

class Animals(object):
# 类的数据属性
    name = "fentiao"
    age = 12
print Animals
# 访问类的数据属性
print Animals.name
print Animals.age
结果为
<class '__main__.Animals'>
fentiao
12

3.类的方法

class Animals(object):
    name = "fentiao"
    age = 12
    weight = 10
# 类的方法 ==== 函数
# 在类中定义的函数叫做方法 ;
# 类的方法中, python 解释器要求第一个形参必须是 self ;与 java 中的 this 类似;
# self 实质上是类实例化后的对象本身 ;
    def eat(self):
        print "eating......"
        print self
# 类的实例化产生的就是对象; 把抽象的类创造出实际存在的事物;
# object: 对象
fentiao = Animals()
print fentiao
# 调用类的方法
fentiao.eat()
结果为
<__main__.Animals object at 0x2c2f490>
eating......
<__main__.Animals object at 0x2c2f490>

4.面向对象的三大特性: 封装, 继承, 多态

1)封装

封装实际上是把数据封装到某个地方, 以后再去调用被封装在某处的内容或者数据;
封装数据
调用封装数据
通过对象直接调用;
通过self间接调用

**例子:
class Animals(object):

# 构造方法
# 当类实例化时会自动调用 __init__ 构造方法 ;
# name, age, weight 是必选参数,当实例化是必须要传参,否则报错 ;
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight
    # eat 方法
    def eat(self):
        print "%s eating......" % (self.name)
        self.weight += 2
    # drink 方法
    def drink(self):
        print "%s is drinking....." % (self.name)
        self.weight += 1
    # 对象可以实例化多个;

fentiao = Animals("fentiao", 5, 12)
tom = Animals("tom", 3, 5)
# self 实质上就是类的实例化对象
print fentiao.name
print fentiao.age
print fentiao.weight
fentiao.eat()
print fentiao.weight
fentiao.drink()
print fentiao.weight
tom.drink()
print tom.weight

结果为
fentiao
5
12
fentiao eating......
14
fentiao is drinking.....
15
tom is drinking.....
6

2)继承

继承
父类和子类; 基类和派生类;
注意: 类的属性名和方法名不同相同;
建议:
属性名用名词;eg:name, age, weight;
方法名建议用动词; eg: eat, drink, get_weight;

**例子:
# Animals 是父类 / 基类 ;
class Animals(object):
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight
    def eat(self):
        print "%s eating......" % (self.name)
        self.weight += 2
    def drink(self):
        print "%s is drinking....." % (self.name)
        self.weight += 1
    def get_weight(self):
        pass
# Dog 是 Animal 的子类 / 派生类 ;
class Dog(Animals):
    # 类里面的方法第一个参数必须是 self
    def jiao(self):
        print "%s wang wang ......." % (self.name)
# Cat 是 Animal 的子类 / 派生类 ;
class Cat(Animals):
    def jiao(self):
        print "%s miao miao miao........" % (self.name)
tom = Dog("tom", 12, 10)
tom.eat()
tom.jiao()
结果为
tom eating......
tom wang wang .......


重写父类的构造函数
    父类名.__init__(self,形参)
    super(自己类的名称, self).__init__(形参)
        不需要明确告诉父类的名称;
        如果父类改变,只需修改class语句后面的继承关系即可;

**例子:
# Animals 是父类 / 基类 ;
class Animals(object):
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight
    def eat(self):
        print "%s eating......" % (self.name)
        self.weight += 2
# Dog 是 Animal 的子类 / 派生类 ;
class Dog(Animals):
    # name, age, weight, dogid
    def __init__(self, name, age, weight, dogid):
        # 第一种重写父类构造方法 ;
        # self.name = name
        # self.age = age
        # self.weight = weight
        # 第二种重写父类构造方法 :
        # 让 Dog 的父类执行它的 __init__ 方法 ;
        # Animals.__init__(self, name, age, weight)
        # self.dogid = dogid
        # 第三种重写父类构造函数的方法 ;
        super(Dog, self).__init__(name, age, weight)
        self.dogid = dogid
# Cat 是 Animal 的子类 / 派生类 ;
class Cat(Animals):
    # name, age, weight, food
    def __init__(self, name, age, weight, food):
        self.name = name
        self.age = age
        self.weight = weight
        self.food = food
        # Animals.__init__(self, name, age, weight)
        # super(Cat, self).__init__(name, age, weight)
        # self.food = food


tom = Dog("tom", 3, 10, '001')
print tom.dogid
harry = Cat("harry", 2, 5, "fish")
print harry.food
print tom.dogid
结果为
001
fish

新式类和经典类

    python2.x里面支持经典类和新式类;
    python3.x里面仅支持新式类;
# - 经典类
class Book1:
    pass
# - 新式类
class Book2(object):
    pass

多重继承

对于新式类来说, 多重继承的算法是广度优先

class D(object):
    def test(self):
        print "D test"
class C(D):
    pass
    # def test(self):
    #     print "C test"
class B(D):
    pass
    # def test(self):
    #     print "B test"
class A(B,C):
    pass
    # def test(self):
    #     print "A test"
a = D()
a.test()
print A.mro()   ##继承算法查看方式A.mro(),只有新式能用

经典类多继承时, 继承算法是深度优先

class D:
    def test(self):
        print "D test"
class C(D):
    pass
    # def test(self):
    #     print "C test"
class B(D):
    pass
    # def test(self):
    #
        # print "B test"
        # A 继承 B 和 C ;
class A(B,C):
    pass
    # def test(self):
    #
        # print "A test"
# A - B - D
#   - C - D

a = A()
a.test()

3)多态

当父类和子类有相同的方法时, 调用优先执行子类的方法;

**例子
# Animals 是父类 / 基类 ;
class Animals(object):
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight
    def eat(self):
        print "%s eating......" % (self.name)
        self.weight += 2
class Cat(Animals):
    def eat(self):
        print "%s eating......" % (self.name)
        self.weight += 1
class Dog(Animals):
    def eat(self):
        print "%s eating......" % (self.name)
        self.weight += 3
tom = Dog("tom", 12, 12)
tom.eat()
print tom.weight

结果为
tom eating......
15




Python-100-Days之面向对象编程 Day8 Python-100-Days – from Github学习笔记 day8 面向对象编程 练习1:定义一个类描述数字时钟。 import time print('start:%s'%time.ctime()) time.sleep(30) print('end:%s'%time.ctime()) –运行时end语句等了好久,sleep推迟30秒是真的要等现实里的30秒诶 from time import sleep class Clock(): def __init__(self,hour=0, 阅读详情

相关推荐

STM32F103 实例应用(10)——I2C读写24C32

一、应用简介 本文介绍24C32的读写,基于野火的软件I2C程序。 board_i2c.h /**=========================================================================== @file board_i2c.h @brief 本文件是用于I2C驱动 @author 青梅煮久 @version r0.1 @date 2021/01/13 -------------------------.

qq_34118600的博客 3447

Python进阶:类

初始化函数:初始化属性 init(self) 真正的构造函数是__new__() 析构函数 del(self) 删除对象的属性 delattr(对象, 属性) 对象是否有某个属性 hasattr(对象, 属性) 静态变量和静态方法 1. 静态变量:定义在函数外边 2. 静态方法:@staticmethod修饰,不需要 self 参数,属于类 3. 类方法:classmethod 修饰,函数不需要实...

onj123的博客 558

PyTorch ModelNet点云数据集加载实战:从下载到Dataset类完整实现

在三维视觉与点云处理领域,数据集是算法研发的基石。ModelNet作为三维物体分类的基准数据集,其地位类似于图像领域的MNIST,是入门和评估模型性能的通用标准。理解其数据格式与加载原理,是进行点云分类、分割等任务的关键前置步骤。通过PyTorch的Dataset类,开发者可以构建高效的数据管道,将原始点云文件转换为神经网络可直接处理的张量格式,这一过程涉及数据采样、归一化、特征组装等核心操作,直接影响模型的训练效率和最终性能。本文聚焦于ModelNet10/40数据集,详细解析其目录结构,并提供一套稳健的

weixin_29032337的博客 283

学一点python基础

pythonr小基础 文章目录pythonr小基础简介认识计算机和程序Python 定义Python程序的执行**python执行过程**python解释器类型基本数据类型注释函数变量del 语句核心数据类型空值对象 None整形int浮点型float字符串str**定义:****编码:****相关函数(取ASCll码):****字面值****转义字符**字符串格式化列表list定义基础操作*列表推导式*列表推导式嵌套复数complex集合 set定义基础操作运算集合推导式固定集合 frozenset定义*

qq_42404383的博客 1万+

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 255

unity中VideoPlayer播放视频,使用Shader除去黑底且无黑边

1. 创建一个Shader 和 一个 材质球;Shader中复制如下代码:(此Shader代码为“ChromaKeyKit”插件中的ChromaKey_Alpa_Genera代码,但因只需要除去视频黑底而挂一个插件有点不合适) // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "ChromaKeyKit/ChromaKey/ChromaKey_Alpha_General"

weixin_42065078的博客 1747

python方法定义的第一个参数是this_从Python中的self说起(理解this与箭头函数)

先来看一段代码:class testThis:name = 'DeeJay'def sayName(self):print (self.name)x = testThis()x.sayName()这段python代码中,testThis是一个类,拥有name属性和sayName()方法。sayName()方法在调用的时候,输出了testThis类的name,我们注意到python中方法的第一个参数...

weixin_39968309的博客 1474

【车载以太网测试从入门到精通】系列文章目录汇总

物理层测试、数据链路层测试、以太网交换机测试、网络层测试、传输层测试、以太网TCP/IP协议自动化测试、以太网网络管理测试、以太网网络管理自动化测试、鲁棒性测试、SOME/IP测试、SOMEI/IP服务接口自动化测试、DoIP诊断测试、DoIP诊断自动化测试、DoIP BootLoader刷写、以太网网关路由测试、以太网网关路由自动化测试、AVB测试。

测试领域技术分享 3162

python类方法第一个参数_python中类方法的第一个参数是什么?

根据我的理解,类方法中传递的第一个参数是定义类方法的类本身。例如,考虑以下代码:class A(object):__x=10@classmethoddef clam(cls,*args):print(cls.__x)class B(A):__x=50当我打电话给你时:^{pr2}$输出是10,据我的理解是可以的,因为被调用的类方法是在类A中定义的,所以类A将隐式传递给clam(),并且x的值是10...

weixin_39886024的博客 1782

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1429

MicroCap声学仿真介绍(二)-创建声学仿真元件

声学库里包含孔、管、障板辐射器等器件,我们只需要按照仿真的需求,将声学库里的器件排列好,输入参数,用线连接起来即可。这里我们用D指代孔的直径,L指代孔的长度,N代表孔的数量。26.在弹出的界面中做如下设置:需要先在右面的选框里找到对应的项,然后右键Add Part,再之后就如下设置。3.在弹出的界面中,选择“Macro file(.mac)”,并点击右上角的“OK”下面就以声学仿真中常见的“孔”来做示例,跟大家一块演示一下宏程序的新建。10.在上图中“Value”中填入“R”,然后点击左边的“OK”按钮;

山无忧的博客 2200

Python类三种方法,函数传参,类与实例变量(一)

1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的‘引用’ a = 1 def func(a): a = 2 func(a) print(a) # 1 a = 1 def fun(a): print("函数里",id(a)) # 函数里 41322472 a = 2 print("赋值后",id(a), id(2)) # 赋值...

诚实可靠小郎君 3万+

[QMT量化交易小白入门]-二、如何用miniQMT获取沪深A股的板块列表、历史行情数据和实时行情数据

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 5659

Python学习DAY07_面向对象编程_进阶

为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对 Python 中的面向对象编程进行更为深入的了解。

学习小屋 1155

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python Day07 - 面向对象编程基础

类和对象 类:是对象的蓝图和模板 对象:是类的实例 注:类是抽象的概念,对象是具体的东西 类的定义 在python中使用class关键字定义类 知识点: 1.在python2中这个object一定要写,但是在python3中可写可不写(默认继承了object) 2.__init__是一个特殊方法用于在创建对象时进行初始化操作;它一般作用于需要某些公共变量时可以定义到init中(例如上图中可...

ZHAOJIAJIAJIAJIA的博客 197

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Day10-python面向对象编程

面向对象编程(OOP)是一种以对象为核心的编程范式,通过类封装数据与行为,实现代码复用和模块化。编程方式经历了从机器语言到高级语言的演进,OOP因能解决复杂系统问题而成为主流。类作为对象的模板,包含属性和方法,具有封装、继承和多态三大特性;对象则是类的实例,具有独立性和动态性。Python中"万物皆对象",包括基础数据类型、函数等。OOP提高了代码可维护性和扩展性,适应现代软件开发需求。

qq_33388535的博客 2126

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python面向对象编程基础_day008

面向对象编程:三大支柱 封装 集成 多态

slb190623的博客 875

[重学Python] Day6 面向对象编程 基础

在Python中可以使用class关键字定义类,然后在类中通过之前学习过的函数来定义方法,这样就可以将对象的动态特征描述出来,代码如下所示。# __init__是一个特殊方法用于在创建对象时进行初始化操作# 通过这个方法我们可以为Car对象绑定属性print('%s正在行驶%s.' % (self.name,speed))print('%s适合售卖给年轻人%s.' % self.color)else:print('%s适合售卖给全年龄段%s.' % self.color)"""数字时钟"""

网络安全知识分享 889

python基础——day07

嵌套函数(内部函数)_数据隐藏 嵌套函数:在函数内部定义的函数! 上面程序中,f2()就是定义在f1 函数内部的函数。f2()的定义和调用都在 f1()函数内部。 一般在什么情况下使用嵌套函数? 封装 - 数据隐藏 外部无法访问“嵌套函数”。 贯彻 DRY(Don’t Repeat Yourself) 原则 嵌套函数,可以让我们在函数内部避免重复代码。 闭包 后面会详细讲解。 084.nonlocal_global nonlocal 用来声明外层的局部变量。 global 用来声明全局变量。 LEGB规则

abhgghjj的博客 224

【Python-Day 28】从指令到蓝图:Python面向对象编程(OOP)入门指南

在过去的27天里,我们掌握了变量、数据结构、循环、函数和模块等编程利器。我们写的代码,就像一份详尽的菜谱,一步步告诉计算机“先做什么,再做什么”。这种编程方式被称为**面向过程编程 (Procedural-Oriented Programming, POP)**。它非常直观,适合解决简单、线性的问题。 然而,当软件项目变得越来越复杂,就像从做一道菜升级到管理一个庞大的连锁餐厅时,“菜谱式”的思维方式就会显得力不从心。代码会变得臃肿、难以维护、复用性差。

吴师兄大模型的博客 1491

Python【面向对象编程】-day3作业

js.buy(10000)--->余额不足 支付失败。

qq_61402449的博客 582

Day03 : python面向对象编程(一)

python中面向对象的一些细节 ------人生苦短,python当歌

Zesheng_Wang的博客 5386

Python基础学习Day_07

换了个封面图,应该没有人看出来吧,哈哈哈

wuliwavv的博客 1082

Python学习Day07

一、面向对象、 类: 是一群具有相同特征或行为的事物的统称,类是抽象的,不能直接 使用 对象: 由类创造出来的具体存在 类: 属性(信息)和方法(你能完成的事情) 1.如何定义类?class 类(): pass 2.如何将类转化为对象?实例化 实例化指在面向对象编程中,使用类创建对象的过程称为实例化,是将 一个抽象的概念具体化的过程 实例化过程中一般由类名 对象名 = 类名(参数1,参数2,…) ...

Garfield777的博客 404

[重学Python]Day7 面向对象编程:封装、继承、多态

之前,我们在类中定义的方法都是对象方法,也就是说这些方法都是发送给对象的消息,实际上,我们写在类中的方法不需要都是对象方法,例如我们顶一个一个三角形类,通过传入三条边长来构造三角形,并提供计算周长和面积的方法,但是传入的三条边长未必能构造出三角形对象,因此我们可以先写一个方法来验证三条边长是否可以构成三角形,这个方法很显然不是对象方法,因为在调用这个方法时三角形对象尚未创建出来,所以这个方法是属于三角形类而不是属于三角形对象的,我们可以使用静态方法来解决这类问题。面向对象编程的三大特性,封装、继承、多态。

网络安全知识分享 1278

Day-07 python进阶

lambda 表达式 无名或匿名函数对象 lambda a,b:a+b f = lambda a,b,c:a+b+c print f(1,2,3) 递归 取代循环的一种方法 阶乘的计算: 例子: def fac(n): if(n==1): return 1 else: return n*fac(n-1) 闭包 函数的嵌套,函数在内部被返回。 内部函数调用外部作用域的变量,则这个函数就是闭...

leopold2015的博客 267
上一篇: Python_day_07_文件操作
下一篇: Python_day_08_类属性
GodDevin
博客等级 码龄9年 39粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值