美文网首页
11-面向对象

11-面向对象

作者: 飘摇的水草 | 来源:发表于2023-04-08 11:32 被阅读0次
概念
  • 面向过程:开发中小型项目效率较高,但是很难适用于如今主流的大中型项目开发,实现一个功能的时候,看重的是开发的步骤和过程,也叫面向过程编程
  • 面向对象,当实现一个功能的真是个,看重的并不是过程和步骤,而是关心谁帮我做这件事,三大特征:封装、继承和多态

面向过程和面向对象是两种编程思想,编程思想是对同一个问题,解决问题的套路方式。

类和对象

  • 是泛指的,指代多个,是由对象的抽象来的
  • 在代码中,是通过关键字 class 定义的

对象

  • 对象是特指的,指代一个,是具体存在的
  • 在代码中,对象是由类来创建的
类的构成

类由三部分组成:

  1. 类名
  2. 属性:特性,变量
  3. 方法:行为,函数
类的定义
  • Python中,定义类使用关键字 class
  • object 是所有的类的基类,即最初始的类
  • 类名,遵循驼峰命名规则

语法规则如下:

class 类名(object):
类中的代码

定义类的三种方式:

# 新式类:直接或者间接继承 object 的类,在Python3中,所有的类默认继承object类,
# 在Python 2中,默认是不继承 object 的
# 旧式类(经典类)
# PEP8规则,类定义的前后需要添加两个空行
class Dog(object):
    pass

class Dog1():
    pass

class Dog2:
    pass
创建对象
# 新式类:直接或者间接继承 object 的类,在Python3中,所有的类默认继承object类,
# 在Python 2中,默认是不继承 object 的
# 旧式类(经典类)
# PEP8规则,类定义的前后需要添加两个空行

class Dog(object):

    # 在类中定义的函数称为方法
    def play(self):
        print ("拆家中")
    pass

dog = Dog();
print id(dog)

dog.play()
在外部给对象添加属性

即使类内部没有定义属性名,依然可以通过下面的方式来给对象添加属性:

dog = Dog()

dog.name = "HeiZi"
dog.age = 4
在类内部获取属性值

在类内部通过 self 来获取属性值

init用法
  • Python 的类中,有一类方法,这类方法以 两个下划线开头两个下划线结尾 ,并且在满足某相特定条件的情况下会自动调用,这类方法,称为魔法方法,魔法方法有:__init____str____del__
  • __init__ 调用时机:在创建对象之后,会立即调用,它的作用是用来给对象添加属性,给对象属性一个初始值(构造函数),其次是代码的业务需求,每创建一个对象,都需要执行的代码可以写在 __init__
class Dog(object):

    def __init__(self,name):
        self.name = name
        print ("__init__方法,我被调用了")

如果 init 函数里有形参,那么在创建对象的时候传递参数,如下所示:

dog1 = Dog(name = "dkdk")
str方法

调用时机:

  1. print(对象) 会自动调用 __str__ 方法,打印输出的结果是 __str__ 方法的返回值
  2. str(对象) 类型转换,将自定义对象转换为字符串的时候,会自动调用

应用:

  1. 打印对象的时候,输出一些属性信息
  2. 需要将对象转换为字符串类型的时候

注意点:方法必须返回一个字符串,只有 self 一个参数

class Dog(object):

    def __init__(self,name):
        self.name = name
        print ("__init__方法,我被调用了")

    def __str__(self):
        return "小狗的名字是{self.name}"

如果在类中没有实现 __str__ 方法,当用 print 方法打印对象的时候,默认输出的是引用地址,如果实现了则输出 __str__ 方法里 return 的字符串

del 方法

其他语言中称为析构函数

调用时机:

  1. 对象在内存中被销毁的时候会自动调用 __del__ 方法
  2. 使用 del 变量 将这个对象的引用计数变为0时也会自动调用

应用场景:

  1. 对象被删除销毁的时候,要书写的代码可以写在 __del__ 中,一般很少使用
class Cat(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __del__(self):
        print "del函数被调用了"

cat = Cat(age = 20,name = "测试")

del cat
查看引用计数
import sys

# 显示的会比实际的多一个
print sys.getrefcount(dog)
repr方法

这个方法和 __str__ 很类似,也是返回字符串,__repr__ 是给用户看的

相关文章

  • 11-面向对象

    内容介绍: 接口多态 1. 接口 1.1 接口概念 接口是功能的集合,同样可看做事一种数据类型,是比抽象类更为抽象...

  • 知识点11-面向对象

    1. 三大特性 封装继承多态 2. 单例模式 线程不安全问题: uniqueInstance 被实例化多次 3. ...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • 20-OOP类与对象

    面向对象 Object Oriented 学习面向对象:XXOO 面向对象的学习: 面向过程和面向对象的区别: 面...

  • JavaScript面向对象核心知识归纳

    面向对象 概念 面向对象就是使用对象。面向对象开发就是使用对象开发。 面向过程就是用过程的方式进行开发。面向对象是...

  • 面向对象(未完成)

    面向对象 标签(空格分隔): 面向对象 第一章:面向对象(上) 什么叫面向对象 面向过程、面向对象、两者区别 构造...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

网友评论

      本文标题:11-面向对象

      本文链接:https://www.haomeiwen.com/subject/qnbuddtx.html