08 面向对象编程

1 介绍

面向对象编程是一种程序设计范式

把程序看做不同对象的相互调用,对现实世界建立对象模型。

面向对象编程的基本思想:

类和实例:

类用于定义抽象类型

实例根据类的定义被创建出来

 

 

2 定义类并创建实例

类通过class关键字定义,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。

class Person(object):

    pass

xiaoming = Person()    #创建实例

xiaohong = Person()

 

3 创建实例属性

对每一个实例,都可以直接给他们的属性赋值。

例如,给xiaoming这个实例加上name,gender和birth属性:

xiaoming = Person()

xiaoming.name = 'XiaoMing'

xiaoming.gender = 'Male'

xiaoming.birth = '1990-1-1'

 

给xiaohong加上的属性不一定要和xiaoming相同:

xiaohong = Person()

xiaohong.name = 'Xiao Hong'

xiaohong.school = 'No.1 High School'

xiaohong.grade = 2

 

实例属性可以像变量一样进行操作:

xiaohong.grade = xiaohong.grade + 1

 

4 初始化实例属性

Person类在创建的时候就拥有name、gender、birth属性。

在定义Person类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,这个方法被自动调用。

__init__()方法的第一個参数必須是self(也可以是別的名字,但建议使用习惯用法)。

class Person(object):

    def __init__(self, name, gender, birth):

        self.name = name

        self.gender = gender

        self.birth = birth

xiaoming=Person('Xiao Ming', 'Male', '1991-1-1')

xiaohong=Person('Xiao Hong', 'Female', '1992-2-2')

 

5 访问限制

Python对属性权限的控制是通过属性名来实现的。

如果一个属性由双下划线开头(__),该属性就无法被外部访问。

class Person(object):

    def __init__(self, name):

        self.name = name

        self._title = 'Mr'

        self.__job = 'Student'

>>> p = Person('Bob')

>>> print p.name    #ok

>>> print p._title    #ok

>>> print p.__job    #error

如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称爲特殊属性。

由很多预定义的特殊属性可以使用,通常不把普通属性用以"__xxx__"定义。

 

6 创建类属性

相当于java类的静态变量。

class Person(object):

    address = 'Earth'    #类属性

    def __init__(self, name)

        self.name = name

 

可以直接访问类属性,而不必通过类的实例访问。

>>> print Person.address    #Earth

 

类属性也可以动态添加和修改:

Person.address = 'China'

在实例上修改类属性时,实际上并没有修改类属性,而是给实例绑定了一个实例属性。

当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。

所以千万不要在实例上修改类属性。

 

7 定义实例方法

一个实例的私有属性就是以__开头的属性,无法被外部访问。

实例的方法就是在类中定义的函数,它的第一个参数永远是self,指向调用该方法的实例本身,其他参数和一个普通函数完全一样。

class Person(object):

    def __init__(self, name):

        self.__name = name

    def get_name(self):

        return self.__name

 

在class中定义的实例方法其实也是属性,它实际上是一个函数对象。

 

8 定义类方法

相当于java的静态方法

和属性类似,方法也分实例方法和类方法

通过@classmethod可以将方法绑定到类上,类方法的第一个参数将传入类本身,通常将参数命名为cls。

class Person(object):

    count = 0

    @classmethod

    def how_many(cls):

        return cls.count

    def __inti__(self, name):

        self.name = name

        Person.count = Person.count + 1

 

>>> print Person.how_many()

 

>>> p1 = Person('Bob')

>>> print Person.how_many()

 

因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。

 

 

 

 

 

 

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

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

相关文章

H5+jqweui实现手机端图片压缩上传 Base64

H5jqweui实现手机端图片压缩上传主要功能,使用H5的formData上传base64格式的图片,canvas压缩图片,前端样式使用weui,为方便起见,使用了jquery封装过的weui,jqweui。话不多少,开始上代码。前端代…

09 类的继承

继承一个类 class Person(object): def __init__(self, name, gender): self.name name self.gender gender class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score score 判断类型 isinstance()可以…

vue 中v-if 与v-show 的区别

相同点或者说功能,都可以动态操作dom元素的显示隐藏 不同点: 1.手段:v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;2.编译过程:v-if切换有一个局部编译/卸…

vue打包后放在 nginx部署时候的配置文件

部署了三套程序,默认的,admin和design#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {include …

淘淘商城之技术选型、开发工具和环境、人员配置

一、技术选型 1)Spring、SpringMVC、Mybatis 2)JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSSDIV 3)Redis(缓存服务器) 4)Solr(搜索&#x…

启动代码格式:nginx安装目录地址 -c nginx配置文件地址

启动启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如:[rootLinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf停止nginx的停止有三种方式: 从容停止1、查看进程号[rootLinuxServer ~]# ps -ef…

Lecture 3 Divide and Conquer

1.Divide the problem(instance) into one or more sub-problem; 2.Conquer each sub-problem recursively; 3.Combine solutions.

Maven报错找不到jre

富人之所以越来越富,穷人之所以越来越穷,中产阶级之所以总是在债务泥潭中挣扎,其主要原因之一在于他们对金钱的观念不是来自学校,而是来自家庭。 ---《穷爸爸富爸爸》 一、报错提示 常规配置maven环境变量,报错&#x…

vue按照url地址访问出错404

问题描述: 最近在开发cms的时候使用Vue.js框架,利用vue-route结合webpack编写了一个单页路由项目,自己在服务器端配置nginx。部署完成后,访问没问题,从页面中点击跳转也没问题,但是只要点击刷新或通过浏览器…

Lecture 4 Quick Sort and Randomized Quick Sort

Quick Sort --Divide and Conquer --Sorts “in place” --Very practical with tuning Divide and Conquer: 1.Divide: Partition array into 2 sub-arrays around pivot x such that elements in lower sub-array < x < elements in upper sub-array; 2.Conquer: …

HDU 3966 树链剖分后线段树维护

题意: 一棵树, 操作1.$path(a,b)$之间的点权$k$ 操作2.单点查询 题解: 树链剖分即可,注意代码细节,双向映射 主要是记录一下板子 #include <string.h> #include <stdio.h> #include <algorithm> #define endl \n #define ll long long #define ull unsigned …

VUE config/index.js文件配置

&#xfeff;&#xfeff; 当我们需要和后台分离部署的时候&#xff0c;必须配置config/index.js: 用vue-cli 自动构建的目录里面 &#xff08;环境变量及其基本变量的配置&#xff09;123456789101112131415var path require(path)module.exports {build: {index: path.res…

数据规则列表加导入导出

1.进入bos&#xff0c;打开数据规则&#xff0c;进入列表菜单 2.点击事件-新增操作 3.点击新增 4.点击操作类型&#xff0c;输入%引入 5.点击确定&#xff0c;保存后生效&#xff0c;导出 、引入模板设置同理转载于:https://www.cnblogs.com/RogerLu/p/10643521.html

Lecture 6 Order Statistics

Given n elements in array, find kth smallest element (element of rank k) Worst-case linear time order statistics --by Blum, Floyd, Pratt, Rivest, Tarjan --idea: generate good pivot recursively. Not so hot, because the constant is pretty big.

C++ qsort() 函数调用时实参与形参不兼容的问题解决

《剑指OFFER》刷题笔记 —— 扑克牌顺子 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿&#xff01;&#xff01;“红心A…

linux jenkins部署之路之,ftp部署怎么匿名还好用咋解决思密达

怎么安装就不说了&#xff0c;网上一堆 这噶搭是配置 目录是/etc/vsftpd/vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf# # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more u…

powerCat进行常规tcp端口转发

实战中&#xff0c;我们也会遇到需要我们进行端口转发的情况&#xff0c;比如已经拿下的目标机1是在dmz区&#xff0c;而目标1所在内网的其他目标只能通过目标1去访问&#xff0c;这时候我们就需要端口转发或者代理来进行后渗透。这次就要介绍一个加强版的nc&#xff0c;基于po…

Lecture 7 Hashing Table I

Hash |---Hash function: Division, Multiplication |---Collision: Chaining, Open addressing(Linear,Double hasing) Symbol-table problem: Table S holding n records pointer --> key|satelite data (record) Hashing: Hash function h maps keys “randomly”…

SpringCloud 微服务

一微服务架构概述1.1 微服务特性以及优点每个服务可以独立运行在自己的进程里一系列独立运行的微服务(goods,order,pay,user,search…)共同构建了整个系统每个服务为独立的业务开发&#xff0c;一个微服务只关注某个特定的功能&#xff0c;例如用户管理&#xff0c;商品管理微服…