python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解

面向对象最重要的概念就是类(class)和实例(instance),类是抽象,而实例(Instance)则是一个个具体的对象

面向对象三大特点:封装、继承和多态

class Animal(object):

def __init__(self, name):

self.name = name # 初始化类变量

def Dog(self): # 创建类中的方法

print(self.name)

复制代码

一、基本概念

1.1 概念

类(Class):

用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类变量:

类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

数据成员:

类变量或者实例变量, 用于处理类及其实例对象的相关的数据。

方法重写:

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

局部变量:

定义在方法中的变量,只作用于当前实例的类。

实例变量:

在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。

继承:

即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。

实例化:

创建一个类的实例,类的具体对象。

方法:

类中定义的函数。

对象:

通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

1.2 代码实例

# -*- coding: utf-8 -*-

"""

1、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。

2、局部变量:在函数内、在class的方法内(未加self修饰的) ,这就是局部变量

3、静态变量:在class内的,但不在class的方法内的,这就是静态变量

4、实例变量:在class的方法内的,用self修饰的变量,这就是实例变量

"""

Global_Variable = "我是全局变量"

class ExampleClass(object):

Class_static_variable = "我是类静态变量" # 静态变量

def __init__(self, Instance_Variable): # 构造函数,sel代表对象,有Instance_Variable属性

self.Instance_Variable = Instance_Variable # 实例变量

def study_example(self):

Local_variable = "我是一个局部变量" # 局部变量

print(Local_variable) # 输出局部变量

print(self.Instance_Variable) # 输出实例变量

class ChlidExample(ExampleClass):

def __init__(self, Instance_Variable, Chlid_Variable):

ExampleClass.__init__(self, Instance_Variable) # 初始化父类实例变量

self.Chlid_Variable = Chlid_Variable

def test(self):

print("学习 python的面向对象,了解变量是必须的,我是孩子变量 {},我是继承变量:{}".format(self.Chlid_Variable, self.Instance_Variable))

Instance_Variable = "我是用来测试实例变量的"

Chlid_Variable = "我是用来测试局部变量的 "

study = ChlidExample(Instance_Variable, Chlid_Variable) # 调用子类对象

study.study_example() # 子类调用父类方法

study_child = ChlidExample(Instance_Variable, Chlid_Variable) # 调用子类对象

study_child.test() # 子类调用子类方法

复制代码

二、面向对象三大特性解析

2.1 封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

所以,在使用面向对象的封装特性时,需要:

将内容封装到某处

从某处调用被封装的内容

class Animal(object):

def __init__(self, name): # 初始化方法

self.name = name # 初始化类变量

def Dog(self): # 创建类中的方法

print(self.name)

def Cat(self): # 创建类中的方法

print(self.name)

info = Animal('dahuang') # 封装到对象 info

print(info.name) # 直接调用

info.Dog() # self 间接调用

复制代码

2.2 继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。

class Animal(object):

def __init__(self, name): # 初始化方法

self.name = name # 初始化类变量

def eat(self): # 创建类中的方法

print("%s吃 "%self.name)

def drink(self): # 创建类中的方法

print("%s喝"%self.name)

class Dog(Animal): # 继承Animal的 Dog

def __init__(self, name):

self.name = name #

def cry(self):

print("汪汪叫")

class Cat(Animal): # 继承Animal的 Cat

def __init__(self, name):

self.name = name #

def cry(self):

print("喵喵叫")

child = Dog('邻居家的猫') # 封装到子类对象 info

child.drink() # 子类调用父类的方法

复制代码

2.3 多态

多态,字面理解为多种形态,没错,就是一个方法能表现出不同的形态。

同一操作(方法)作用于不同的对象,可以有不同的解释,产生不同的结果,而无须明确知道这个子类实际上是什么。将其上升到父类与子类的层面时,就是父类的引用指向了子类的对象。

前面所讲的封装和继承都是为多态服务的

然而, Python属于鸭子类型,大意是:当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

python中的鸭子类型允许我们使用任何提供所需方法的对象,而不需要迫使它成为一个子类。

多态三大前提:

要有继承;

重写;

父类引用指向子类对象。

class Animal(object):

def __init__(self, name): # 初始化方法

self.name = name # 初始化类变量

class Dog(Animal): # 继承Animal的 Dog

def __init__(self, name):

self.name = name #

def cry(self):

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

class Cat(Animal): # 继承Animal的 Cat

def __init__(self, name):

self.name = name

def cry(self):

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

def DuoTai(child):

print(child.cry())

child1 = Dog('邻居家的狗') # 封装到子类对象 info

DuoTai(child1) # 多态展示Cry方法,重写

child2 = Cat('邻居家的猫') # 封装到子类对象 info

DuoTai(child2) # 多态展示Cry方法, 重写

复制代码

三、进阶

3.1 基础重载方法

0ad6bcf7546f5e2539372b384994289a.png

3.2 下划线说明

foo:

定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。

_foo:

以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

_ _ foo:

双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

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

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

相关文章

如何安装mysql5.7.2_CentOS 7.2 安装MySQL 5.7

CentOS 7之后的版本yum的默认源中使用MariaDB替代原先MySQL,因此安装方式较为以往有一些改变:下载mysql的源wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm安装yum库yum localinstall -y mysql57-community-release-el7-7.n…

java父类调用子类方法_Java 中父类怎么调用子类的方法?

父类能调用子类的方法吗?答:能。怎么做?● 把子类传递到父类的有参构造中,然后调用。● 使用反射的方式调用,你使用了反射还有谁不能调用的?!● 父类调用子类的静态方法。案例展示:p…

java entity转dto_java 使用反射在dto和entity 实体类之间进行转换

public class Utils {/*** 将dto和entity之间的属性互相转换,dto中属性一般为String等基本类型,* 但是entity中可能有复合主键等复杂类型,需要注意同名问题* param src* param target*/public static Object populate(Object src, Object target) {Method[] srcMethods src.ge…

java 字符串转dom对象_xml类型的字符串转换为Dom对象

我写这篇博客的目的是因为我在这一点转换方面耽搁了快2天时间,真是惭愧呀,dom4j.jar包有自带方法DocumentHelper.parseText(String text)用于将字符串类型的xml转换为Dom对象,从而进行下面的解析,还有一个关键是:产生字…

java nlpir_中科院NLPIR中文分词java版

摘要:为解决中文搜索的问题,最开始使用 版 SCWS ,但是处理人名和地名时,会出现截断人名地名出现错误。开始使用 NLPIR 分词,在分词准确性上效果要比 SCWS 好。本文介绍如何在 系统下 JAVA ,生成可以执行的 …

java怎编写么解析一个类型_DAY3:你必须知道的java虚拟机之类篇——类文件的结构...

马上过年啦,不知道大家今年有没有投资基金股票呢?是赚的盆满钵满还是拍断大腿,可以评论区一起交流交流,秀一秀哈哈,反正我是没来得及上车。暴富西不可能暴富的啦,打工人嘛几能写写文章啦~记得点…

java开发工具排名_排名前16的Java工具类

在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。一. org.apache.commons.io.IOUtilscloseQuietly&#xf…

java 线程 事件_Java事件调度线程解释

我最近开始学习和探索Java编程的基础知识。已经编程了一段时间,我只做了后端工作或工作,因此最接近我已经得到用户界面是命令控制台(我知道的尴尬)。我使用Swing,就我可以收集这意味着通过扩展我也使用AWT。我的问题是基于这段代码&#xff1…

java自学笔记_JAVA自学笔记(4)

发现JAVA的有趣Day1 继承不是"继承"1.0 继承的格式public classFU {public voidmethod(){System.out.println("Good night!");}}public class ZI extendsFU {}public classPractice {public static voidmain(String[] args) {ZI zinewZI();zi.method();}}打…

java中isolate时间_Java HikariDataSource.setIdleTimeout方法代码示例

import com.zaxxer.hikari.HikariDataSource; //导入方法依赖的package包/类private HikariDataSource createHikariDataSource(JdbcProperties jdbcProperties) {HikariDataSource hikariDataSource new HikariDataSource();hikariDataSource.setJdbcUrl(jdbcProperties.getJ…

java连接mysql通用方法_jdbc操作数据库通用方法

1 /**2 * 增删改查操作公共类(以oracle数据库为例)3 * 2017-8-29 wuyafei4 *5 */6 public classCrudUtil {7 /**8 * 1.获取数据库连接9 * 2.获取statement,加载sql语句10 * 3.获取resultset11 *12 */13 public static Connection connnull;14 public static Stateme…

java velocity 邮件_邮件集成java mail + 读取邮件模板

项目做异地登录提醒功能,通过java mail发送邮件。读取邮件模板sendMail.vm文件。1.邮件发送import java.io.StringWriter;import java.util.Properties;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.intern…

java分隔符算法_《Java数据结构和算法》栈 分隔符分配

分隔符包括“{“、"["、”(”、“] “、“)“、“}”,每个左分隔符需要右分隔符匹配。同时,在字符串中后出现左分隔符应该比早出现的先匹配。程序从字符串中不断读取字符,每次读取一个字符。若发现是左分隔符…

Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解

这篇文章主要介绍了Java Iterator接口遍历单列集合迭代器原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Iterator接口概述在程序开发中,经常需要遍历集合中的所有元素。针对这种需求&#x…

mysql1846错误_远程连接MySQL报错ERROR 2003解决办法

转自https://blog.csdn.net/hjwang1/article/details/51669223问题代码代码ERROR 2003 (HY000): Cant connect to MySQL server on 192.168.0.19 (111)ERROR 2003 (HY000): Cant connect to MySQL server on 192.168.0.19 (111) 这个 原因就是Mysql数据库的默认配置文件my.cnf(…

java webview 对象_Android – 将JSON对象从webview javascript传递给java

我在java端有一个带有webview和javascript接口的Activity.我想用Java编写一个可以接受来自webview的json参数的方法.JavascriptInterfacepublic String test(Object data) {Log.d("TEST", "data " data);}在我的webview javascript上我打电话&#xff1a…

php商城的购物车功能,php实现购物车功能(以大苹果购物网为例)

首先是几个简单的登录页面登录用户名:密 码:登录页面写好之后,需要进入处理页面,从数据库中调出用户名和密码:session_start(); //开启session 必须要写到第一行header("Content-type:text/html;charsetutf-8&quo…

php的功能和特点,php的特点有哪些

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快:PHP是一种强大的CGI脚本语言,语法混合了C、Java、Perl和PHP式的新语法,执行网页比CGI、Perl和ASP更快,这是它的第一个突出的特点。 (推荐学习:PHP视频教程…

php写入文本乱码,如何解决PHP用fwrite写入文件中文乱码的问题

如何解决PHP用fwrite写入文件中文乱码的问题发布时间:2020-07-15 13:52:07来源:亿速云阅读:220作者:Leah这期内容当中小编将会给大家带来有关如何解决PHP用fwrite写入文件中文乱码的问题,文章内容丰富且以专业的角度为…

php判断有没有登录,请问thinkphp 怎么在每个方法里面判断是否登录?

[tp版本3.2.3]我在Controller里面写了一个公共类CommonController.class.php,写了一个构造方法来判断是否登录,没登录就重定向到登陆页:namespace Admin\Controller;use Think\Controller;class CommonController extends Controller{public …