python面向对象

一.time&datetime&hashlib模块应用

1time时间模块

代码演示:

import time
#1.获取当前时间对应的时间戳,使用浮点型表示,单位:秒【掌握】
t1 = time.time()
print(t1)

#2.休眠,参数的单位为秒,可以为浮点数【掌握】
print("hello1")
time.sleep(2)  
print("hello2")

2.datetime日期模块【掌握】

是对time模块的封装,比time模块更加全面

 

'''
import datetime  

获取当前的日期对象,包含时间的
dt_now = datetime.datetime.now()

根据指定的日期、时间生成一个日期对象
dt_ziding = datetime.datetime()

dt.strftime()  将日期对象转化为指定的格式
dt.date()   获取日期对象中的日期
dt.time()   获取日期对象中的时间
dt.timestamp()  获取日期对象的时间戳
dt.hour\minute\second  获取小时、分钟、秒

根据一个时间戳,转化为指定的日期对象
datetime.datetime.fromtimestamp()

生成一个差值对象,可以和日期对象直接进行相加减
datetime.timedelta()

参数有,days,hours,minutes,seconds
'''

'''
# %y 两位数的年份表示(00-99)
# %Y 四位数的年份表示(000-9999)
# %m 月份(01-12)
# %d 月内中的一天(0-31)
# %H 24小时制小时数(0-23)
# %I 12小时制小时数(01-12)
# %M 分钟数(00-59)
# %S 秒(00-59)
# %a 本地简化星期名称
# %A 本地完整星期名称
# %b 本地简化的月份名称
# %B 本地完整的月份名称
# %c 本地相应的日期表示和时间表示
# %j 年内的一天(001-366)
# %p 本地A.M.或P.M.的等价符
# %U 一年中的星期数(00-53)星期天为星期的开始
# %w 星期(0-6),星期天为星期的开始
# %W 一年中的星期数(00-53)星期一为星期的开始
# %x 本地相应的日期表示
# %X 本地相应的时间表示
# %% %号本身
'''

代码演示:

import  datetime

#1.获取当前时间
d1 = datetime.datetime.now()
print(d1)  #2018-05-29 11:20:51.432757

#2.获取指定的时间,通过元组形式
d2 = datetime.datetime(2015,10,1,10,23,23,1234)
print(d2)

#3.将时间格式化
d3 = d1.strftime("%Y.%m.%d")
print(d3)

#4.将时间字符串转换为datetime实体
d4 = datetime.datetime.strptime(d3,"%Y.%m.%d")
print(d4)

#5.直接进行加减运算
date1 = datetime.datetime(2015,10,1,10,23,23,0)
print(date1)

date2 = datetime.datetime(2015,10,4,10,23,23,0)
date3 = date2 - date1
print(date3)  #3 days, 0:00:00

print(date3.days)
print(date3.seconds)

3.加密模块

#加密模块
import hashlib
'''
    md5加密:不可逆的加密算法(只能加密不能解密)  明文和密文一一对应  加盐(随机的字符串 或者字符)
    非对称加密算法:(公钥和私钥)  通常情况下:公钥用来加密  私钥用来解密   比如:RSA加密
    对称加密算法: 加密和解密使用同一个密钥    比如:DES和AES
'''
m = hashlib.md5()
m.update('123456'.encode())   #byte类型
print(m.hexdigest())
#e10adc3949ba59abbe56e057f20f883e

该可以按照下面的方式去写:
mpsw=hashlib.md5(b'123456').hexdigest()#给123456加密,转为16进制

对中文加密:
data = "你好"
hashlib.md5(data.encode(encoding="UTF-8")).hexdigest()

二、面向对象思想

1.面向对象思想设计

基于哲学观点:万物皆对象, 一切皆对象

举例说明:

案例一:我想吃大盘鸡

面向过程 面向对象

1.自己去买菜 1.委托一个人帮忙买菜

2.自己择菜 2.委托一个人帮忙择菜

3.自己做菜 3.委托一个人厨师做菜

4.自己吃 4.自己吃

案例二:小明是一个电脑小白,想要配置一台电脑

面向过程 面向对象

1.小明补充电脑知识 1.委托一个懂电脑的人买零件

2.小明去买零件 2.委托一个人组装

3.小明把零件运回来 3.小明打开玩游戏

4.小明组装

5.小明打开玩游戏

2.面向过程和面向对象的区别

2.1面向过程

在生活案例中:

​ 一种看待问题的思维方式,在解决问题的时候,侧重于问题是怎样一步一步解决的,然后亲力亲为的去解决

在程序中:

​ 代码从上往下依次执行

​ 各个模块之间的关系尽可能的独立的,当import的时候,加载的顺序也是从上往下依次加载

​ 每个模块中的语句结构:顺序,分支,循环

2.2面向对象

在生活案例中:

​ 一种看待问题的思维方式,侧重于找到一个具有特殊功能的个体,然后委托这个个体帮忙完成某件事情,这个个体就被称为对象

​ 好处:可以将复杂的问题简单化,将程序员从执行者变成了指挥者

在程序中:

​ 根据不同的需求执行代码【代码执行顺序不一定】

​ 程序的流程完全由需求决定【对象】

​ 思想:如果对象存在,则直接使用;如果对象不存在,则创建对象

注意:面向对象只是一种思想,并不是一门编程语言

Python是一门面向对象的编程语言,类和对象是 面向对象的核心

示例: 小狗吃食(闻一闻smell、舔一舔lick、咬一咬bite)
      分别采用面向过程和面向对象来分析

面向过程 :  先闻一闻, 然后再舔一舔, 最后再咬一咬 (注重过程) 
面向对象 :  小狗是一个对象, 它可以闻一闻食物, 可以舔一舔食物, 可以咬一咬食物.      (不注重过程, 注重对象)

三、类和对象【掌握】

1.类和对象的概念

类:多个具有特殊功能的个体的集合 例如: 人类 狗 猫

对象:在一个类中,一个具有特殊功能的个体,能够帮忙解决某件特定的事情,也被称为实例【instance】

比如: 孙钰昊 孙钰昊家的中秋猫 陈冰杰家的狼青

两者之间的关系:类用于描述某一类对象的共同特征,而对象是类的具体的存在

思考问题:先有类还是先有对象?

【在程序中使用的时候,一般是先定义类,然后创建对象】

举例:

​ 类 对象

​ 人 王麻子, 李四, 赵四。。

​ 快递 韵达,中通,圆通。。

SupreHero 蝙蝠侠,蜘蛛侠,美国队长。。

帮忙理解:类其实也是一种数据类型,只不过一般情况下是自定义的,所以可以将类认为是自定义的数据类型,用法和整型,str,list等基本是相同的【定义变量,传参】

2.类的定义

语法:

class 类名( ):

​ 类体

说明:

​ a.Python中使用class关键字定义类

​ b.类名只要是一个合法的标识符即可,但是要求:遵循大驼峰命名法则【首单词的首字母大写,不同单词之间首字母大写】

​ c.通过缩进区分类体

​ d.类体一般包含两部分内容:属性和方法

代码演示:

#定义类   类主要有属性和方法组成
class Dog():
    #类的属性 (一般情况下以变量的形式存在)
    name = "旺财"
    color = "黑色"
    height = 0.8

    #类的方法  (一般使用函数表示)
    def wang(self):
        print(self.name,"汪汪")

    def eat(self):
        print(self.name,"吃肉,吃骨头")

#对象
labuladuo = Dog()
labuladuo.eat()
labuladuo.wang()

三、类中的方法和变量【掌握】

1.类中的方法和变量的定义

类中的方法和变量是为了描述事物的行为和特征

类中定义的方法被称为成员方法

类中定义的变量被称为成员变量,也被称为属性 [os.name]

成员变量:类具有的特征

成员方法:类具有的行为

类存在的意义:拥有相同特征和行为的对象可以抽取出来一个类,类的存在是为了创建一个具体的对象

代码演示:

#定义类
#1.事物的名称:类名
class Person():
    #2.事物的特征:成员变量、属性
    name = ""
    age = 0
    height = 0.0

    #3.事物的行为:成员方法【函数】
    #注意:类中的成员方法区别于普通方法:参数部分一定包含self(名字可以不是self,但是一般使用self),而且最好self出现在参数列表的第一个
    #调用函数的时候,self不需要被传参
    #除此之外,成员方法的用法和普通方法的使用完全相同,也可以设置默认参数或者关键字参数,不定长参数

    #注意:self:自己,代表类的实例【对象】
    #此处的self可以是任意的标识符,只不过为了结合其他编程的使用,习惯上使用self
    def eat(self,food):
        print("eating",food)
    def run(self):
        print("running")

2.类中方法和属性的使用

2.1创建对象【实例化对象】

已知类,通过类创建对象

对象的创建过程被对象的实例化过程

语法:变量名 = 值

​ 对象名 = 类名()

代码演示:

class Person():
    #类属性
       name = "社会我强哥"
       age = 38
       love = "打豆豆,造娃,撸代码,抠脚丫"
   
       #类中的方法
   #self详解:
       '''
           1.self不是关键字,只是一般取名用它
           2.self参数一般作为方法中的第一个参数,不能省略
           3.self的作用是:调用类中的其他属性和方法
           4.self指向当前对象:哪个对象调用了类中的方法,那self就表示哪个对象
       '''
       def dance(self):
           #self调用了类中的name属性
           print(self.name,"你看过强哥跳桑巴吗?")
           #self调用了类中的sing方法
           self.sing()
           #查看self的内存地址
       print("定义的类中获取self内存:",id(self))

    def sing(self):
        print("听强哥唱:我的眼里只有你")
        print("类中的self内存:",id(self))
#创建对象
zhaoqiang = Person()
zhaoqiang.dance()
print("具体对象获取内存:",id(zhaoqiang))
xiaoqiang = Person()
xiaoqiang.sing()
print("xiaoqiang获取内存:",id(xiaoqiang))

总结:

​ 访问变量采用:对象名.属性名

​ 访问方法采用:对象名.方法名(参数列表)

3.内存中的对象

per = Person()

说明:

a.程序中定义的Person类型的变量per实际上是一个变量名,它被存放在栈内存中,他指向实际的Person对象,而真正的Person对象则存放于堆内存中

b.类中的成员变量随着对象的出现而出现,随着对象的消失而消失

c.每个对象的成员变量会在堆空间中开辟一份自己的空间,相互之间互不影响

四、构造函数和析构函数

1.构造函数【掌握】

采用上面的方式创建对象【直接给成员变量赋值】,很多的类一般倾向于创建成有初始状态的
__init__:构造函数【作用:创建对象,给对象的成员变量赋初始值】
构造函数:构造器
调用的时机:当一个对象被创建的时候,第一个被自动调用的函数
per = Person()

语法:
    def __init__(self,args1,args2....)
        函数体
说明:
    a.之前的写法中并没有显式的定义__init__函数,说明系统默认提供了一个无参的构造函数
    b.args1,args2...一般设置的形参列表和成员变量有关

代码演示:

class GirlFriend():
    '''
           #类属性 (不推荐)
           name = "林志玲"
       age = 43
       '''
   
       #构造函数  __init__(self,arg1,arg2....)
   '''
           __init__(self,arg1,arg2....)构造函数:作用创建对象的时候,给对象赋初始值
           构造函数也叫做构造器
        调用的时机:当一个对象创建的时候,第一个被自动调用的函数
                    ling = GirlFriend()
        说明:
           1.之前的写法中没有显示的定义一个__init__构造函数,说明系统已经提供了一个无参的构造函数
            2.arg1,arg2....一般设置的形参列表和创建对象的时候的成员变量有关
    '''
       #构造函数
       def __init__(self,name,age):
           #对象属性
           self.name = name
           self.age = age
           print("构造函数的触发时机是:当创建对象的时候自动触发")
       #类方法
       def say(self):
           print(self.name,"卡哇伊")
       def sing(self):
       print(self.name,"唱歌给谁听")


    #析构函数  __del__
        '''
            触发时机:当对象被销毁的时候,自动触发的函数.比如删除对象 del
            使用场景:清理工作.  比如删除数据库  删除文件等操作 
        '''
       def __del__(self):
           print("析构函数被调用了")

   ling = GirlFriend("林志玲",42)
   bing = GirlFriend("范冰冰",40)
   
   ling.say()
   bing.sing()
print(ling,bing)

#删除对象
del ling

2.析构函数

与构造函数正好相反,当对象被销毁的时候自动调用的函数,被称为析构函数
__del__:
​
删除变量:   del  变量名,此时可以触发析构函数的调用
​
使用情景:清理工作,比如关闭数据库,关闭文件等

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python面向对象编程是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的属性和方法。在Python中,可以通过定义类来创建对象,并通过实例化类来创建具体的对象。引用[1]中的代码示例展示了一个Animal类,其中包含了初始化方法和一个__str__方法来返回对象的描述信息。通过这个类,可以创建Animal对象,并通过print函数输出对象。引用中的代码示例展示了如何使用@property装饰器来定义类的属性和属性的访问方法。通过这种方式,可以在访问属性时像访问普通属性一样使用点号,而不需要使用方法调用的方式。引用中的代码示例展示了多态在Python中的应用。多态是面向对象编程的重要概念,它允许不同的对象以相同的方式对外部访问,但具体的实现可能不同。在这个示例中,father、son和daughter类都继承了father类,并重写了tell方法。通过调用不同的对象的tell方法,可以看到不同的输出结果。总之,Python面向对象编程是一种灵活且强大的编程方式,它允许开发者以对象为中心来思考和组织代码,提高了代码的可读性和可维护性。通过定义类、创建对象和使用类的属性和方法,可以实现丰富多样的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python面向对象(全套)](https://blog.csdn.net/Thewei666/article/details/126652501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值