14面向对象

这篇具有很好参考价值的文章主要介绍了14面向对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

面向对象

面向对象编程介绍

面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。
需要注意的是,与之对应的是面向过程编程思想。实际上,能够使用面向对象编程思想实现的程序,也都能通过面向过程完成。只是看哪种思想更适合当前开发需求。

面向过程与面向对象区别

面向过程:根据业务逻辑从上到下写代码  
面向对象:将数据与函数绑定到一起,进行封装。减少重复代码的重写过程

类和对象

  • 类:具有同一特征的事物,是抽象的,不是真实存在的。用来描述具有相同属性和方法的对象的集合。
  • 对象:某一个具体事物的存在,在现实世界中可以是看得见摸得着的。

注意:开发中,先有类,再有对象。

类的构成

类由3个部分构成

  • 类的名称:类名
  • 类的属性:一组数据
  • 类的方法:允许对类进行操作的方法

注意:类名通常采用驼峰式命名方式,尽量让字面意思体现出类的作用。

# 类的定义
class 类名称:
    类的属性(成员变量)
    
    类的行为(成员方法)

创建对象

python中,可以根据已经定义的类去创建出一个个对象
创建对象的格式为:

# 创建类对象的语法
对象 = 类名称()

类与对象的使用

# 定义
class 类名:
    def 方法名(self,参数):  # 类中函数:称为方法
        pass
        
# 执行
s = 类名()         # 创建对象(实例) 这个过程就是实例化
s.方法名(参数)     # 调用类中方法

self参数

在类当中定义方法时,会发现系统帮我们自动创建了self参数,并且在调用对象的该方法时,也无需传入self参数。

self的两个概念:

  • self本身是形参
  • self就是当前对象本身
class Student:
    def printinfo(self):
        print(lisi.name, lisi.age)
        print(self.name, self.age)   # 这里会高亮,对象的属性是暴露在外面的
        print(lisi)
        print(self)

lisi = Student()  # 对象
# 对象的属性是暴露在外面的
lisi.name = '李四'
lisi.age = 38

lisi.printinfo()
"""
李四 38
李四 38
<__main__.Student object at 0x000002E5A099B208>
<__main__.Student object at 0x000002E5A099B208>

说明在类中printinfo()方法中,lisi和self是等价的
"""

魔法方法

在Python的类中,以两个下划线开头、两个下划线结尾的方法,如常见的 :__init__()、__str__()、__del__()等,就被称为「魔术方法」(Magic methods)。之所以会叫魔法方法原因是这些方法都是到达某个条件自动触发,无需调用,如果希望根据自己的程序定制特殊功能的类,那么就需要对这些方法进行重写。使用这些「魔法方法」,我们可以非常方便地给类添加特殊的功能。

__init__()

_init_() :初始化对象

class My_Phone():
    def __init__(self):
        self.width = 10
        self.heigth = 15

    def main(self):
        print(self.width)
        print(self.heigth)

apple = My_Phone()

_init_() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
_init_(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。

  • 带参数的init

⼀个类可以创建多个对象,对不同的对象设置不同的初始化属性,传参即可。

class My_Phone():
    def __init__(self,width,heigth):
        self.width = width
        self.heigth = heigth

    def apple_phont(self):
        print("苹果手机的宽为:",self.width)
        print("苹果手机的高为:",self.heigth)

    def huawei_phont(self):
        print("华为手机的宽为:",self.width)
        print("华为手机的高为:",self.heigth)

apple = My_Phone(10,20)
apple.apple_phont()

_str_()

当使⽤print输出对象的时候,默认打印对象的内存地址。如果类定义了 str ⽅法,那么就会打印在这个⽅法中 return 的数据。
_str_():解释类的属性或作用

class Demo():
    def __init__(self, width, heigth):
        self.width = width
        self.heigth = heigth

    def __str__(self):
        return f"你这个手机的宽是{self.width},高度是{self.heigth}"

a = Demo(10,20)
print(a)  # 你这个手机的宽是10,高度是20
# 若没有__str__()方法,则会打印对象的内存地址:<__main__.Demo object at 0x000001E6FC7A7198>

_del_()

当删除对象时,python解释器也会默认调⽤ __del__() ⽅法。在对象销毁的时候被调用,当对象不再被使用时,del()方法运行:

class Demo():
    def __init__(self, width, heigth):
        self.width = width
        self.heigth = heigth

    def __del__(self):
        print("对象已经删除")

a = Demo(10,20)

# __del__方法
class Demo:
    def __del__(self):  # 当由该类创建的实例对象,被删除或者说在内存中被释放,将会自动触发执行。
        print("被释放了!")


d = Demo()
print("*" * 20)
# del d  # 相当于提前执行了del方法
print("*" * 20)

类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问

class Demo():
    __num = 0  # 私有属性
    result = 0  # 公开属性

    def count(self):
        self.__num += 1
        self.result += 1
        print(self.__num)

    def getnum(self):
        return self.__num

run = Demo()
run.count()
print(run.result)
# print(run.__num)    # 报错,实例不能访问私有变量
__num = run.getnum()
print(__num)

类的私有方法

class func:
    def fun1(self):
        print("1")

    def __fun2(self):
        print("2")

    def fun3(self):
        return (self.__fun2())

f = func()

f.fun1()
# f.__fun2()
f.fun3()

# 强行调用类的私有方法
# 对象._类名__私有属性
print(f._func__fun2)  # 不建议使用

python中没有真正意义上的私有文章来源地址https://www.toymoban.com/news/detail-412954.html

实例属性

# 实例属性
class Province:
    def __init__(self, country, province):
        self.country = country
        self.province = province

    def print_info(self):
        print(self.country, self.province)  # 通过self去访问  这个要方便很多
        print(zs.country, zs.province)   # 通过每个对象去访问


zs = Province("中国", "湖南")
zs.print_info()

ls = Province("中国", "湖北")
ls.print_info()

实例方法

class Demo:
    def __init__(self):
        self.name = "张三"

    # 实例方法  
    def fun1(self):
        print(self.name)

a = Demo()
a.fun1()

到了这里,关于14面向对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 再申明一次:面向对象编程不是面向人编程

    这个方法就我自己调用,所以就没封装... 这个RPC方法只有我自己写的代码会调用,日 期参数就用String了。因为我知道我会传“yyyy-MM-dd”格式的日期。 为了使用spring事务,我就把这两个插入数据的操作放到一个方法里了。 这个方法名还好吧,其他地方不调用。 这个返回值用

    2024年02月19日
    浏览(29)
  • 【Java语言面向对象】(1)面向过程编程

    人机猜拳的第一版(下方是程序源码) 人机猜拳(面向过程版本) 三部分组成 初始化 游戏开始 游戏数据统计 逐步完成,并阶段测试。 面向过程整体的思路:做一件事,分为多个步骤,每个步骤之间是有序的,最后按序完成。 面向过程的优缺点: 优点:符合人类思维,简

    2023年04月09日
    浏览(41)
  • 【JAVA杂货铺】一文带你走进面向对象编程的构造方法 | Java| 面向对象编程 | (中)

    🌈个人主页:  Aileen_0v0 🔥系列专栏: Java学习系列专栏 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\"   目录 回顾  构造方法  this 面试题 构造方法的类型  下节预告 代码块  之前我们学习了什么是类  什么是对象  什么是面向对象编程 定义类   构造方法 :它的方法名

    2024年02月05日
    浏览(41)
  • 再谈编程范式(3):理解面向过程/面向对象/函数式编程的精髓

    面向过程是随着VB一起来到我的世界,那个时候会的非常有限,感觉能把程序写出来自己就非常棒了,VB是做那种可视化界面,在工具栏拖个框框放到面板上,然后就在各个事件上写完整的逻辑,什么封装,抽象,继承一概不懂,就有一种一个方法把实现过程需要的逻辑都罗列

    2024年01月20日
    浏览(31)
  • 【C++】面向对象编程(二)面向对象的编程思维:virtual虚拟调用、继承、protected成员、派生类与基类

    默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,需要在成员函数的声明前加上virtual: 虚函数的作用: 用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,会调用 真正指向对象的成员函数 ,而

    2024年02月07日
    浏览(35)
  • TypeScript类与对象:面向对象编程的基础

    TypeScript 是 JavaScript 的一个超集,它为 JavaScript 添加了静态类型、类、接口和装饰器等面向对象编程的特性,并通过编译器将 TypeScript 编译成JavaScript,可以在任何 JavaScript 环境中运行,因此成为了 JavaScript 开发中不可或缺的工具。面向对象编程是现代编程语言的基础,而 Ty

    2024年02月09日
    浏览(32)
  • 第十章 面向对象编程(高级)

    定义语法: 访问修饰符        static        数据类型        变量名; 类变量也叫 静态变量/静态属性 ,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。 (

    2024年02月06日
    浏览(39)
  • Java——面向对象编程思想

    如果有人问你,C和Java的区别是什么呢? 我想大部分人肯定脱口而出的是:C是面向过程的,Java是面向对象的。 那如何理解面向过程和面向对象呢? 首先,面向过程和面向对象都是编程思想。 ①面向过程,以C语言为代表,它是按解决一个问题的的流程或者先后步骤来编程的

    2024年02月11日
    浏览(34)
  • 面向对象编程主线二

    面向对象编程 在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构 Scanner, String等 文件:File 网络资源:URL 涉及到Java语言与前端HTML、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象 理解:我们创建的对象

    2024年02月13日
    浏览(25)
  • Java面向对象编程·上

    大家好,我是晓星航。今天为大家带来的是面向对象编程相关的讲解!😀 包 (package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性. 例如, 你在代码中写了一个 Test 类. 然后你的同事也可能写一个 Test 类. 如果出现两个同名的类, 就会冲突, 导致代码不能编译通过

    2023年04月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包