当前位置: 首页 > article >正文

Python学习第十三天--面向对象,类和对象

一、面向过程和面向对象区别

面向过程:需要实现一个功能时,着重的是开发的步骤和过程,每个步都需要自己亲力亲为,需要编写代码(自己来做)

面向对象:需要实现一个功能时,不注重的是开发的步骤和过程,关心的是谁来帮我做这件事。

二、类与对象

类是一个抽象的概念,对象是一个实实在在的概念

1、类

类名习惯使用大驼峰命名法:首字母大写,私有类可用一个下划线开头

1)类的定义

class Test:
    pass #空类中使用pass
class Test:
    food = "chicken"
    def info(self):  #self指的是创建出来的对象
        print(self)  #打印当前对象的地址

2)类中包含内容

属性:实际上为类中定义的变量,该变量为属性

方法 :类中定义的函数

3)查看类的属性

Test.__dict__

>> {'__module__': '__main__', 'food': 'chicken', 'info': <function Test.info at 0x0000018F068BD1F0>, '__dict__': <attribute '__dict__' of 'Test' objects>, '__weakref__': <attribute '__weakref__' of 'Test' objects>, '__doc__': None}

4)查看单个属性的内容

Test.__dict__["food"]

>> chicken

5)增删改查类中的单个属性

改:Test.food = "beef"

删:del Test.food

增:Test.drink = "tea"

2、对象

1)创建对象

对象名=类名()

a = Test()
a.info()  #此处self为a

2)增删改查对象中的单个属性

改:a.food = "beef"

删:del a.food

增:a.drink = "tea"

3)在方法内通过self获取对象属性 

class Test():
    food = "chicken"
    def info(self):  #self指的是创建出来的对象
        print(self.food)

a = Test()
a.info()

>> chicken

 3、实例属性和类属性的区别

class B:
    num = 0   #类属性
    def __init__(self,name):
        self.name = name    #实例属性
    def test(self):
        print(self.name)

三、构造函数

def __init__():

__init__()具有初始化作用,当该类被实例化时会自动执行该函数。那么通常可把要初始化的属性放在这个方法里去

无参构造:def __init__(self):

有参构造:def __init__(self,参数1,参数2...):

构造函数无返回值,一个类中只有一个构造函数

四、析构函数

def __del__(self):

析构函数用于在对象被清除后清除他所占用的内存空间,主要用于对那些长期占用内存的临时变量进行销毁

析构函数没有参数,无返回值,一个类中只有一个析构函数,在跳出对象作用域时会自动调用析构函数。可以在析构函数中加入输出语句,在看到输出语句内容时就表示该对象已被销毁

手动执行析构函数:del 对象名

五、__str__()方法

1、作用

能够在输出对象变量时打印自定义内容。

没有该方法时,输出的是对象的地址;使用该方法时,输出为该方法返回的自定义内容

2、注意

  1. __str__()必须返回一个字符串;
  2. 定义了 __str__()方法,在打印对象时,默认输出该方法的返回值

3、例子

class B:
    def __str__(self):
        return "this is my new name"

b = B()
print(b)

>> this is my new name


http://www.kler.cn/a/412919.html

相关文章:

  • 量化交易系统开发-实时行情自动化交易-4.5.1.机器学习策略实现
  • 计算机网络安全实验-使用Kali进行Metasploit操作宿主机摄像头的相关操作步骤
  • 【Jenkins】自动化部署 maven 项目笔记
  • 【Linux运维】关于Linux系统运维基本操作命令
  • Linux入门系列--用户与权限
  • 不用下载安装的线上3D编辑器,支持哪些功能?
  • NUMA架构及在极速网络IO场景下的优化实践
  • 狂野飙车8+(Asphalt 8+) for Mac 赛车竞速游戏 安装教程
  • 【代码随想录|贪心算法02】
  • 【Android】AnimationDrawable帧动画的实现
  • Java---JDBC案例--手机信息管理系统
  • 基于企业微信的问卷系统的设计与实现
  • HiISP(一)
  • 银联大数据面试题及参考答案
  • vue3总结
  • [Bash]遍历文件夹下的动态库文件,并为每个so文件创建一个软连接(symbolic link)
  • Windows修复SSL/TLS协议信息泄露漏洞(CVE-2016-2183) --亲测
  • 数据结构(Java)—— ArrayList
  • 数字图像处理(9):VGA接口及其时序
  • 使用C语言实现Linux的date>date.txt功能