python学习之面向对象【入门初级篇】
作者:叶珍力 发布时间:2023-11-19 19:59:44
前言
最近在学习Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。
概述
python支持多种编程范式:面向过程、面向对象、面向切面(装饰器部分)等。
面向过程:根据业务逻辑从上到下写垒代码
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
面向对象:对函数进行分类和封装,让开发“更快更好更强...”
OOP思想
面向对象的基本哲学:世界由具有各自运动规律和内部状态的对象组成,对象之间相互作用和通讯构成了世界。
唯一性,世界没有两片相同的树叶,同样的没有相同的对象。
分类性,分类是对现实世界的抽象。
三大特性:封装、继承和多态
面向对象的三大特性:
一、封装
封装,对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用。
私有化:将类或函数中的某些属性限制在某个区域之内,外部无法调用。
Python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。
例如:
class ProtectMe(object):
def __init__(self):
self.me = "qiwsir"
self.__name = "kivi"
def __python(self):
print("I love Python.")
def code(self):
print9"Which language do you like?")
self.__python()
if __name__ == "__main__":
p = ProtectMe()
print(p.me)
print(p.__name)
#运行结果
qiwsir
Traceback (most recent call last):
File "21102.py", line 21, in <module>
print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name'
说明:__name属性隐藏了,无法调用。
调用私有属性,可以使用property函数
class ProtectMe(object):
def __init__(self):
self.me = "qiwsir"
self.__name = "kivi"
@property
def name(self):
return self.__name
if __name__ == "__main__":
p = ProtectMe()
print(p.name)
#运行结果
kivi
所以,在使用面向对象的封装特性时,需要:
将内容封装到某处
从某处调用被封装的内容
第一步:将内容封装到某处
self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 )
时,self 等于 obj1
当执行 obj2 = Foo('alex', 78 )
时,self 等于 obj2
所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种情况:
通过对象直接调用
通过self间接调用
class Role(object):
ac = None #类变量
def __init__(self,name,role,weapon,life_value):
#初始化方法
self.name = name #实例变量(成员变量)
self.role = role
self.weapon = weapon
self.life_val = life_value
def buy_weapon(self,weapon): #定义方法
#self:表示实例本身
self.weapon = weapon
# print("%s is buying [%s]" %(self.name,weapon))
#把一个抽象的类变成一个具体的对象的过程,叫实例化
p1 = Role("sanjiang",'Police',"B10",90) #实例
t1 = Role("Chunyun",'Terrorist',"B11",100)
二、继承
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
class SchoolMember(object):
# member_nums = 0
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
# self.enroll()
def enroll(self):
SchoolMember.member_nums += 1
print("SchoolMember [%s] is enrolled!" %self.name)
def tell(self):
print("Hello my name is [%s]" %self.name)
class Teacher(SchoolMember):
def __init__(self,name,age,sex,course,salary): #重写父类的__init__方法
super(Teacher,self).__init__(name,age,sex) #继承(新式类)
# SchoolMember.__init__(self,name,age,sex) #继承(旧式类)
self.course = course
self.salary = salary
def teaching(self):
print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
class Student(SchoolMember):
def __init__(self,name,age,sex,course,tuition):
super(Student,self).__init__(name,age,sex)
self.course = course
self.tuition = tuition
def pay_tuition(self):
print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))
来源:http://www.cnblogs.com/yezl/p/5806841.html
猜你喜欢
- 升级了浏览器到IE9,今天进入公司网站后台突然发现有些页面进不去了,F12调试显示有JS错误:DOM Exception: INVALID_
- 手写数字识别算法import pandas as pdimport numpy as npfrom sklearn.neural_netwo
- MVC模式MVC, 全名Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Mo
- RegMail是用来存放注册邮件的表,现以创建时间(CreateTime)字段来给表进行分区,具体步骤如下:--为分区创建存储文件 
- 发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性。很多人在群里问,这个下拉框定位不到、那个弹出框定位不到…各种定位不到,
- 监控Linux服务器嘛,脚本逻辑基本上是用os.popen模块,然后把获取到的结果通过split切分成一个list,再拿目标list值和我阈
- ASP实现即时显示当前页面浏览人数online.asp文件 <!--#include file="dbconn.a
- -----最近从github上找了一个代码跑,但是cpu训练的时间实在是太长,所以想用gpu训练一下,经过了一天的折腾终于可以用gpu进行训
- PHP mysqli_stat() 函数创建 SSL 连接:<?php// 假定数据库用户名:root,密码:123456,数据库:c
- 一般网站发布信息会在具体实现范围内发布,我们在进行网络爬虫的过程中,可以通过设置定时爬虫,定时的爬取网站的内容。使用python爬虫框架Sc
- PHP _construct() 函数实例函数创建一个新的 SimpleXMLElement 对象,然后输出 body 节点的内容:<
- IE(internet explorer)公司:微软(MicroSoft)布局引擎:Trident(也做MSHTML)注:解析渲染
- 数据库,网站运营的基础,网站生存的要素,不管是个人用户还是企业用户都非常依赖网站数据库的支持,然而很多别有用心的攻击者也同样非常&l
- 写在前面 最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。虽然昨天已经提交了项目,但有很多地方值得总结一下,比如这一篇,
- 去年曾总结了《IE对CSS样式表的限制和解决方案》中限制的第4条写道“一个CSS文件的不能超过288kb?”,这是一个疑问句,当时没有重现出
- 1.什么是装饰器?要理解什么是装饰器,您首先需要熟悉Python处理函数的方式。从它的观点来看,函数和对象没有什么不同。它们有属性,可以重新
- 具体用法如下: 代码如下:-- ============================================= -- Autho
- 函数使用单下划线_开头使用单下划线(_)开头的函数_func不能被模块外部以: from module import *形式导入。但可以用:
- 在网站的一些应用中需要提供用户直接打印页面的功能,最明显的就是电子优惠券,商家根据网站提供的模板输入内容,然后生成优惠券页面,用户打印这个页
- 设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cooki