青少年python积木式_python学习之面向对象【入门初级篇】

本文介绍了Python中的面向对象编程,包括面向对象的基本哲学、封装、继承和多态。通过实例解释了如何实现私有属性、如何通过@property装饰器访问私有属性,以及如何使用继承来扩展类的功能。此外,还展示了如何通过super()在子类中调用父类的方法。面向对象编程是提高代码复用性和组织性的重要手段。
摘要由CSDN通过智能技术生成

前言

最近在学习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

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

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

将内容封装到某处

从某处调用被封装的内容

第一步:将内容封装到某处

9487d57b86119831597b19d51e15cde7.png

self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1

当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

12ef1562c320243dd2c06b014a7b0c88.png

第二步:从某处调用被封装的内容

调用被封装的内容时,有两种情况:

通过对象直接调用

通过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))

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 常用 PEP8 编码规范详解

Python常用PEP8编码规范代码布局缩进每级缩进用4个空格。括号中使用垂直隐式缩进或使用悬挂缩进。EXAMPLE:#(垂直隐式缩进)对准左括号foo=long_function_name(va

Python 数据结构之堆栈实例代码

Python堆栈堆栈是一个后进先出(LIFO)的数据结构.堆栈这个数据结构可以用于处理大部分具有后进先出的特性的程序流.在堆栈中,push和pop是常用术语:push:意

Python 数据结构之队列的实现

Python队列Queue队列是一种先进先出(FIFO)的数据类型,新的元素通过入队的方式添加进Queue的末尾,出队就是从Queue的头部删除元素.用列表来做Queue:queue=[]#初

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值