python面向对象编程138讲_Python面向对象编程简单讲解

学习目标:

1-面向对象编程

2-类和对象

3-对象的属性和方法

4-类的特性

Python面向对象编程

一种编程程序的设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

在Python中,所有数据类型都可以视为对象,也可以自定义对象。自定义的对象数据类型就是面向对象中的类(class)概念。

面向对象的设计思想是抽象出Class(类)和instance(实例),面向对象的抽象程度比函数高,一个类即包含数据又包含操作数据的方法。

类和对象

面向对象编程的两个非常重要的概念:类和对象

对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组的景象定义,提出了另外一个新的概念——类

具有相似内部状态和运动规律的实体的集合。具有相同发生和行为事物的统称,类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在。一个类可以找到多个对象。

对象

某一个具体事物的存在,在现实世界中可以是看得风措得着的,可以是直接使用的。

类与对象之间的关系:类就是创建对象的模板

定义类和创建对象

定义一个类和创建对象,格式如下:

#创建类——经典方法

class 类名: #class-关键字,类名的命名使用大驼峰命名法,即首字母大写

#如下:

class Hero:

#创建类——新方法

class Hero(object):#object是python里所有类的最顶级父类

#函数,在类中叫做方法

#创建方法

def info(self):#info是一个实例方法,第一个参数一般是self:表示实例对象本身。

print("这是面向对象hero")

#创建对象

对象名1 = 类名()

对象名2 = 类名()

对象名3 = 类名()

对象名(不必遵循大驼峰命名法) = 类名()

my_hero = Hero()

#对象的使用方法,对象名.(点语法)方法名

my_hero.info()

#输出结果:

这是面向对象hero

#再创建一个对象

my_hero2 = Hero()

print(my_hero)

print(my_hero2)

#输出结果:

<__main__.hero object at>#地址:在存储机制中

<__main__.hero object at>#地址

对象的属性和方法

获取和添加对象的属性

class teacher(object):

def show(self):

print("今天北京下雪了")

#创建对象

teacher_zhang = teacher()

#添加属性、特点、特征

teacher_zhang.name = "张三"

teacher_zhang.age = 20

teacher_zhang.sex = "男"

#获取属性,通过点语法

print(teacher_zhang.name)

输出结果:张三

#修改属性

teacher_zhang.age = 30

print(teacher_zhang.age)

输出结果:30

init 魔法函数:用来做属性的初始化

class teacher(object):

def __init__(self):

print("这是init方法")

def showName(self):

print("我的名字")

zhangsan = teacher()

zhangsan.showName()

#输出结果

这是init方法

我的名字

#__init__()方法,在创建一个对象时自动被调用,不需要手动调用

即:

class teacher(object):

def __init__(self):

print("这是init方法")

def showName(self):

print("我的名字")

zhangsan = teacher()

#输出结果:

这是init方法

#有参数的init方法

class teacher(object):

def __init__(self,name,age):

print("这是init方法")

self.name = name

self.age = age

print(name,age)

def showName(self):

print("我的名字")

zhangsan = teacher("张三",20)

#输出结果

张三 20

类的特性:封装、继承、多态

继承:多个类之间的所属关系

class Father(object):

def __init__(self,name):

self.name = name

print("我叫%s"%self.name)

def info(self):

print("我来自")

class Son(object):

def show(self):

print("展现我自己")

guoQilin = Son()

guoQilin.show()

#输出结果:展示我自己

单继承:Son类继承于Father

class Father(object):#父类:基类

def __init__(self,name):

self.name = name

self.family = "郭氏"

print("我叫%s"%self.name)

def info(self):

print("我来自%s家族"%self.family)

class Son(Father):#子类,通过继承,可以使用父类中的方法

def show(self):

print("展现我自己")

def info(self):

print("我是德云社新一代,个性就是要与众不同")

guoQilin = Son("郭麒麟") #”郭麒麟“是属性,guoQilin是一个对象

guoQilin.show()

guoQilin.info()

#输出结果

我叫郭麒麟

展现我自己

我是德云社新一代,个性就是要与众不同

子类在继承的时候,子类定义小括号中父类的名字;父类中的属性与方法都会传给子类;虽然子类没有定义init方法,但是父类有,子类应付使用父类的方法。

多继承:

#多继承

class Father(object):

def __init__(self,name):

self.name = name

self.family = "郭氏"

print("我叫%s"%self.name)

def info(self):

print("我来自%s家族"%self.family)

class ShiFu(object):

def __init__(self):

self.teacher = "于氏门生"

def speak(self):

print("我要说相声")

class Son(Father,ShiFu):

def show(self):

print("展现我自己")

def info(self):

print("我是德云社新一代,个性就是要与众不同")

guoQilin = Son("郭麒麟") #”郭麒麟“是属性,guoQilin是一个对象

guoQilin.show()

guoQilin.info()

guoQilin.speak()

#输出结果

我叫郭麒麟

展现我自己

我是德云社新一代,个性就是要与众不同

我要说相声

#魔法属性,可以查看继承顺序,子类,父类,师父类

print(Son.__mro__)

#输出结果

(, , , )

重写父类方法

子类继承父类,父类的方法满足不了子类的需要可以对父类的方法进行重写;重写的特点:继承关系,方法名相同

属性方法

类属性与实例属性

类属性就是类对象所拥有的属性,这被所有类对象的实例对象所共有,在内存中只存在一个副本。

#类属性

class People(object): #创建一个类

ame = "tom" #公有的类属性

__age = 12 #私有的类属性

p = People() #创建一个对象

#类的共有属性,实例(对象)与类都可以调用

print(p.name)

print(People.name)

#输出结果:

tom

tom

#私有的类属性,只能在类里面调用

print(p._age)

print(People._age)

#实例属性

class People(object):

ame = "tom"

#类属性,直接在类里面写的

def __init__(self):#self会将其下的属性指给对象

self.name = "xiaowang" #实例属性

self.age = 20

p = People()

p.age = 12

print(p.name)

print(p.age)

#输出结果

xiaowang

12

可以用实例属性改掉类属性

静态方法和类方法

类方法是类对象所拥有的方法,第一个参数必须是类对象,一般以cls作为第一个参数,能够通过实例对象和类对象去访问。类方法用@classmethod修饰。

静态方法用@staticmethod修饰,不能传入self,是独立的单纯的函数 。

#魔法属性,可以查看继承顺序,子类,父类,师父类

print(Son.__mro__)

#输出结果

(, , , )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jboss 程序位置_介绍JBoss BPM Suite安装程序

jboss 程序位置本周&#xff0c;我们想向您介绍JBoss BRMS和JBoss BPM Suite产品随附的一个鲜为人知的安装程序组件。 请注意&#xff0c;当前所有的演示项目都要求您下载JBoss BPM Suite可部署的eap zip产品文件和JBoss EAP 6.1.1 zip产品文件。 展望未来&#xff0c;我们将迁…

java换成中文_如果我们的编程替换成中文会变成怎样?

首先大概的看一下中文编码&#xff1a;你以为会写中文就会编程吗&#xff1f;这就像你以为会写汉字就会写出好文章一样。编程是和机器沟通&#xff0c;因此要用机器的语言而不是人类的语言。最早的程序就是0和1的数字&#xff0c;不是中文也不是英文。以前的程序员&#xff0c;…

高等数学公式大全_高中物理知识思维导图大全,赶紧收藏!

物理作为理综的重中之重&#xff0c;物理的学习一直是广大考生的难点。如何快捷高效的掌握物理知识点是高考复习的重点之一&#xff0c;根据高中物理三年知识点用思维导图的方式&#xff0c;来助大家掌握物理知识点。运动的描述 重力 基本相互作用 相互作用 牛顿运动定律 力的合…

HTTP方法:幂等性和安全性

幂等性和安全性是HTTP方法的属性。 HTTP RFC定义了这些属性&#xff0c;并告诉我们哪些HTTP方法是安全且幂等的。 服务器应用程序应确保正确执行安全和幂等的语义&#xff0c;如客户端期望的那样。 安全的HTTP方法 如果HTTP方法不更改服务器状态&#xff0c;则认为它们是安全的…

java a[i].setx(-1);_java – setX和setY在尝试定位图像时不起作用

我在使用setX上的setX和setY为我的JavaFX程序中定位图像时遇到问题.我不确定是什么问题&#xff1f;感谢任何给予的帮助&#xff01;这是我的代码&#xff1a;Image rocket2 new Image("img/Rocket.png");ImageView iv1 new ImageView(rocket2);iv1.setX(60);iv1.s…

go环境搭建_学习的golang第一步,搭建我们运行的环境,go! go! go

这是Golang教程系列中的第一个教程。本教程介绍了Go&#xff0c;并讨论了选择Go优于其他编程语言的优势。我们还将学习如何在Mac OS&#xff0c;Windows和Linux中安装Go。介绍Go也称为Golang是由Google开发的一种开源&#xff0c;编译和静态类型的编程语言。创造Go的关键人物是…

如何在Java中将数组转换为列表

你好朋友&#xff0c; 在本教程中&#xff0c;我们将学习将数组转换为List的各种方法。 package com.blogspot.javasolutionsguide;import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils;import java.util.ArrayList; import ja…

html5网页制作代码_HTML5的网页设计教程

关注小编&#xff0c;教你如何制作网页HTML5是超文本标记语言(HyperText Markup Language)的第五代版本&#xff0c;它是书写网页代码的一种规范、一种标准。它通过标记符号来标记要显示的网页中的各个部分。浏览器根据这个标准显示其中的内容(如&#xff1a;文字如何处理&…

java命令框编译代码的方式_在命令行模式下如何编译运行Java代码

由于已经习惯了在Windows环境中进行开发&#xff0c;最近在尝试将开发环境转移到Linux上面。遇到一篇值得参考的外文&#xff0c;特翻译记录一下。【只翻译了部分】一直被集成开发环境和自动构建工具“溺爱”着&#xff0c;我最近意识到我居然一点儿都不会在命令行模式下去运行…

hibernate jpa_JPA /Hibernate刷新策略初学者指南

hibernate jpa介绍 在我以前的文章中&#xff0c;我介绍了实体状态转换 对象关系映射范例。 当刷新当前持久性上下文时&#xff0c;所有管理实体状态转换都将转换为关联的数据库语句。 Hibernate的刷新行为并不总是像人们想象的那样明显。 后写 Hibernate尝试将持久性上下文刷…

aop+注解 实现对实体类的字段校验_SpringBoot实现通用的接口参数校验

来自&#xff1a;掘金&#xff0c;作者&#xff1a;cipher链接&#xff1a;https://juejin.im/post/5af3c25b5188253064651c76原文链接&#xff1a;http://www.ciphermagic.cn/spring-boot-aop-param-check.html本文介绍基于Spring Boot和JDK8编写一个AOP&#xff0c;结合自定义…

java基础分享_一、java基础教程

1、java是一门比较纯粹的面向对象编程语言&#xff0c;所以java的所有代码都必须写在类的内部。1.1 java的可执行文件后缀名是".java"&#xff0c;例如HelloWorld.java&#xff0c;并且每个可执行文件内部&#xff0c;必须有且仅有一个public公共类/公共接口/公共抽象…

Spring Boot自定义横幅生成

每当我们启动Spring Boot应用程序时&#xff0c;都会显示如下所示的文本消息。 这称为横幅。 现在&#xff0c;如果我们可以创建一个特定于我们的Spring Boot应用程序的自定义横幅并使用它代替默认的Spring Boot横幅&#xff0c;那将不是一件很棒的事。 有很多方法可以生成和使…

java简单递归算法_java递归算法的简单示例

java递归算法的简单示例今天参加笔试&#xff0c;要求用递归实现1357……没写出来&#xff0c;蛋疼。。。。下面复习一下&#xff0c;自己尝试着写还是没有写出来。。。。。没有写出来的关键是自己不知道该如何实现求和、实现出口递归实现的关键是&#xff1a;1.出口的设计2.递…

java等待_Java学习:等待唤醒机制

等待唤醒机制线程的状态NEW 至今尚未启动的线程处于这种状态RUNNABLE 正在Java虚拟机中执行的线程处于这种状态BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态WAITING 无限期的等待另一个线程来执行某一待定操作的线程处于这种状态TIMED_WAITNG 等待另一个线程来执行取…

游戏ai 行为树_游戏AI –行为树简介

游戏ai 行为树游戏AI是一个非常广泛的主题&#xff0c;尽管有很多资料&#xff0c;但我找不到能以较慢且更易理解的速度缓慢介绍这些概念的东西。 本文将尝试解释如何基于行为树的概念来设计一个非常简单但可扩展的AI系统。 什么是AI&#xff1f; 人工智能是参与游戏的实体表现…

java适配器模式应用_java笔记--适配器模式的运用

适配器模式的运用主要应用&#xff1a;可以在符合OCP原则(开笔原则)的基础上&#xff0c;为类增加新的功能。在现有功能上添加新的功能时无须修改原有功能代码。主要角色&#xff1a;目标角色&#xff1a;就是期待得到的接口&#xff0c;如给汽车添加GPS的接口;源角色&#xff…

java构造器_Java构造器就是这么简单!

前言理解构造器之前&#xff0c;首先我们需要了解Java中为什么要引入构造器&#xff0c;以及构造器的作用。在很久之前&#xff0c;程序员们编写C程序总会忘记初始化变量&#xff08;这真的是一件琐碎但必须的事&#xff09;&#xff0c;C引入了 构造器(constructor) 的概念&am…

JavaFX技巧32:需要图标吗? 使用Ikonli!

动机 自2013年以来&#xff0c;我一直在编写JavaFX应用程序和库的代码&#xff0c;它们的共同点是&#xff0c;我需要找到可以用于它们的良好图标/图形。 作为前Swing开发人员&#xff0c;我首先使用图像文件&#xff0c;GIF或PNG。 通常&#xff0c;我会从IconExperience&…

mysql索引是什么 优点和缺点_mysql索引的类型和优缺点

现在来介绍了数据库索引&#xff0c;及其优、缺点。针对MySQL索引的特点、应用进行了详细的描 述。分析了如何避免MySQL无法使用&#xff0c;如何使用EXPLAIN分析查询语句&#xff0c;如何优化MySQL索引的应用。本文摘自《MySQL 5权威指南》(3rd)的8.9节。索引是一种特殊的文件…