Python全栈之面向对象基础

目录
  • 1. 面向对象oop了解
  • 2. 对象的相关操作
    • 小提示:
  • 3. 类的相关操作
  • 4. 类对象的删除操作
    • 小提示:
  • 5. 小练习
    • 小提示:
    • 答案:
  • 总结

1. 面向对象oop了解

# ### oop 面向对象的程序开发
# (1) 类的定义
# 1
class Car:
	pass
# 2 推荐
class Car():
	pass
# 3.
class Car(object):
	pass

# (2)类的实例化
class Car():
	pass
obj = Car()
print(obj)
# (3)类的基本结构
"""
类中两样东西:
	(1)成员属性
	(2)成员方法
"""
class Car():
	# 成员属性
	color = "白色"
	# 成员方法
	def didi():
		print("小车会嚓嚓的叫")

# 语法上不报错,但是严禁使用,破坏了类中的结构,不要裸露的把判断和循环直接写在类中,而是用方法包起来
class Car():
	if 5 ==5 :
		print(11223344)
# (4)类的命名
"""类的命名 : 推荐使用大驼峰命名法,每个单词的首字母都要大写"""
"""
mycar => MyCar
zhangbaozhang => ZhangBaoZhang
"""

2. 对象的相关操作

# ### 面向对象的封装 - 对象的操作
"""
封装:
	1.私有 : 在类内可以互相访问,在类外不能访问
	2.公有 : 在类内或者类外都可以访问
类中成员:
	1.成员属性
	2.成员方法
绑定方法:
	1.绑定到对象 : 当对象去调用类中成员方法时,系统会默认把该对象当成参数传递给该方法
	2.绑定到类   : 当对象或者类去调用类中成员方法时,系统会默认把该类当成参数传递给该方法
使用方式:
	对象.成员属性
	对象.成员方法
"""
class MyCar():
	# 公有属性
	logo = "布加迪威龙"
	# 私有属性
	__price = "2000万"
	# 公有方法
	def run(self):
		print("百公里油耗300L,logo={} , price={}".format(self.logo, self.__price))
	# 私有方法
	def __info(self):
		print("车主信息保密,据说是某个房地产大佬的儿子")
# 实例化对象(类的实例化)
obj = MyCar()
# (1)实例化的对象访问成员属性和方法
# 公有
print(obj.logo)
obj.run()
# 私有 (私有成员无法在类外访问,类内可以)
# obj.__price error
# obj.run()
# obj.__info() error

#(2)实例化的对象动态添加公有成员属性
obj.color = "尿黄色"
obj.logo = "五菱宏光"
print(obj.color)
print(obj.logo)
# __dict__ 获取类对象的内部成员
print(obj.__dict__)
print(MyCar.__dict__)
#(3)实例化的对象动态添加公有成员方法
# 1.无参方法
def dahuangfeng():
	print("请加我大黄蜂")
obj.dahuangfeng = dahuangfeng
obj.dahuangfeng()
# 2.有参方法
# 基本版
def qingtianzhu(name):
	print("请叫我一柱擎天么,{}".format(name))
obj.qingtianzhu = qingtianzhu
obj.qingtianzhu("擎天柱")
# 升级版
def qingtianzhu(obj,name):
	print("请叫我一柱擎天么,{},我的颜色是{}".format(name,obj.color))
obj.qingtianzhu = qingtianzhu
obj.qingtianzhu(obj,"擎天柱")
# 究极版
"""如果要创建绑定方法,参数的顺序,self对象本身要放到第一位."""
def qingtianzhu(obj,name):
	print("请叫我一柱擎天么,{},我的颜色是{}".format(name,obj.color))
import types
# 创建绑定方法,系统自动把该对象当成参数传递给方法;
# types.MethodType(方法,对象) => 绑定方法
res = types.MethodType(qingtianzhu,obj)
print(res)
obj.qingtianzhu = types.MethodType(qingtianzhu,obj)
obj.qingtianzhu("擎天柱")
# 3.lambda表达式
obj.weizhentian = lambda : print("我是威震天")
obj.weizhentian()

小提示:

类对象在调用方法,如果方法是类外的(自定义的方法),那么不会自动传参的(不会把类对象传到方法里面)
self是用来接收对象这参数(self只是一个名字而已,无所谓,习惯用self)

3. 类的相关操作

# ### 面向对象的封装 - 类的操作
"""
使用方式:
	类.成员属性
	类.成员方法
"""
class MyCar():
	# 公有成员属性
	platenum = "京A7758BB"
	# 私有成员属性
	__earning = "月收入6000"
	# 公有成员方法
	def car_info():
		print("牌照信息可以公开")
		print("<======>")
		MyCar.__money_info()
	# 私有成员方法
	def __money_info():
		print( "收入信息保密" , MyCar.__earning )

# (1)定义的类访问公有成员属性和方法
print(MyCar.platenum)
MyCar.car_info()
# MyCar.__money_info() error
# (2)定义的类动态添加公有成员属性
MyCar.oil = "1000L"
print(MyCar.oil)
print(MyCar.__dict__)
# (3)定义的类动态添加公有成员方法
# 1.无参方法
def car_light():
	print("我是造车灯的方法")
MyCar.car_light = car_light
MyCar.car_light()
# 2.有参方法
def car_engine(name):
	print("我是造{}发动机的方法".format(name))
MyCar.car_engine = car_engine
MyCar.car_engine("三缸发动机")
# 3.lambda表达式
MyCar.luntai = lambda : print("我是造轮胎的方法")
MyCar.luntai()

# 对比 对象和类之间的不同
"""
1.类中的无参方法默认只能类来调用,对象无法调取
2.对象可以调用类中的成员,反过来,类不能调用对象中的成员
3.每创建一个对象都会在内存中占用一份空间,对象之间是彼此独立的;
"""
obj = MyCar()
# obj.car_info() error
MyCar.car_info()

obj.price = "10万"
print(MyCar.price)

4. 类对象的删除操作

# ### 1.如何在类外访问私有成员
class Plane():
	# 公有成员
	captian = "赵沈阳"
	# 私有成员
	__air_sister = "3名空姐"
	# 公有绑定方法
	def fly(self):
		print("飞机要非要平流层,才能减少震动",self.__air_sister)
	# 私有绑定方法
	def __age(self):
		print("空姐年龄保密")
	# 公有无参方法
	def fly2():
		print("航天飞机飞到天空层,翱翔太空")
	# 私有无参方法
	def __earn():
		print("机长的收入保密")
	def pub_get1(self):
		print(self.__air_sister)
		self.__age()
	def pub_get2():
		print(Plane.__air_sister)
		Plane.__earn()
# 实例化对象
obj = Plane()
# 方法一.访问私有成员 (不推荐)
# python私有化: 采取了改名策略 =>  _类名 + __air_sister
# print(obj.__air_sister)
print(obj._Plane__air_sister)
print(Plane.__dict__)
"""
{'__module__': '__main__', 'captian': '赵沈阳',
'_Plane__air_sister': '3名空姐',
'fly': <function Plane.fly at 0x7f2774616158>, '_Plane__age': <function Plane.__age at 0x7f27746161e0>, 'fly2': <function Plane.fly2 at 0x7f2774616268>, '_Plane__earn': <function Plane.__earn at 0x7f27746162f0>, '__dict__': <attribute '__dict__' of 'Plane' objects>, '__weakref__': <attribute '__weakref__' of 'Plane' objects>, '__doc__': None}
"""
# 方法二.访问私有成员 (使用类中的公有方法,间接访问私有成员) (推荐)
obj = Plane()
obj.pub_get1()
Plane.pub_get2()
# ### 2.使用类对象删除相应的成员
"""
1.对象可以访问类中的公有成员,但是无权修改或者删除该类中的成员
2.对象在访问成员时,优先访问该对象自己的成员,如果没有在访问类的,类如果也没有直接报错;
"""
# 删除对象成员属性
obj.captian = "赵世超"
del obj.captian
print(obj.captian)
# 删除对象成员方法
obj.basketball = lambda : print("我的私人飞机可以在天上打篮球")
print(obj.__dict__)
obj.basketball()
del obj.basketball
print(obj.__dict__)
# obj.basketball() error
# 删除类中成员属性
del Plane.captian
print(Plane.__dict__)
# Plane.captian
# print(obj.captian) error
# 删除类中成员方法
del Plane.fly2
# Plane.fly2() error
# 注意: 对象无法调无参方法!! 返回来,类可以调用对象的绑定方法么? 可以!!
Plane.fly(obj)

小提示:

如果在类外添加公有方法
def  __abc():
    print(1)
 在类外定义的方法__abc()只是简单的函数名字而已,之后在类里面定义
的时候,__abc()才是私有方法。
删除或创建私有的方法,要在类外去操作
对象在调用属性的时候,先看自己有没有,然后在看类中的属性
class Plane():
    def fly1(self):
        print("飞机要起飞")
   def fly2(self):
       print("飞机真的要起飞了",self.captian)
   def fly3():
        print("飞机不起飞")
Plane.fly1(1) 类可以调用有参的方法,随便穿个值进去即可
Plane.fly2(1) 这样的话就报错,Plane.fly2(obj) 把对象传进去就可以出结果
如果说对象调用类中无参的方法是不会成功的

5. 小练习

1.请定义一个交通工具(Vehicle)的类,其中有:
属性:速度(公有speed), 车的类型(私有type)
方法:速度(公有setSpeed),加速(私有speedUp),减速(私有speedDown)
让公有setSpeed调用私有speedUp和私有speedDown
2.用类改写:猜数字游戏:
一个类有两个成员num和guess,
num有一个初值100。
定义一个方法guess,
调用guess,如果大了则提示大了,小了则提示小了。等于则提示猜测成功。
3.创建一个圆Circle类。
为该类提供一个变量r表示半径
方法一返回圆的面积,方法二返回圆的周长;

小提示:

如果在类内的话,都是用对象调用方法或变量(self.speed、self.eat()),如果不是类的话,可以直接调变量和方法
r = 3 归属于circle这个类
self.r = r 归属于self这个对象

答案:

"""
1.请定义一个交通工具(Vehicle)的类,其中有:
属性:速度(公有speed), 车的类型(私有type)
方法:速度(公有setSpeed),加速(私有speedUp),减速(私有speedDown)
让公有setSpeed调用私有speedUp和私有speedDown
"""
class Vehicle():
	speed = "百公里1小时"
	__type = "拖拉机小蹦蹦"
	def setSpeed(self):
		self.__speedUp()
		self.__speedDown()
	def __speedUp(self):
		print("我是加速方法,速度{}".format(self.speed))
	def __speedDown(self):
		print("我是减速方法,小车的类型是{}".format(Vehicle.__type))
obj = Vehicle()
obj.setSpeed()
"""
2.用类改写:猜数字游戏:
一个类有两个成员num和guess,
num有一个初值100。
定义一个方法guess,
调用guess,如果大了则提示大了,小了则提示小了。等于则提示猜测成功。
"""
import re
class GuessGame():
	num = 100
	def guess(self):
		while True:
			n = input("请输入要猜测的数字")
			obj = re.search(r"^\d+$",n)
			# print(obj)
			if obj:
				n = int(obj.group())
				if n > self.num:
					print("大了..")
				elif n < self.num:
					print("小了..")
				elif n == self.num:
					print("ok~ bingo")
					break
			else:
				print("输入的内容不正确")
# obj = GuessGame()
# obj.guess()
"""
3.创建一个圆Circle类。
为该类提供一个变量r表示半径
方法一返回圆的面积,方法二返回圆的周长;
"""
import math
class Circle():
	r = 3
	def area(self):
		return math.pi * self.r ** 2
	def perimeter(self):
		return 2 * math.pi * self.r
obj = Circle()
res1 = obj.area()
res2 = obj.perimeter()
print(res1,res2)
# 方法二 (推荐)
import math
class Circle():
	def __init__(self,r):
		self.r = r
	def area(self):
		return math.pi * self.r ** 2
	def perimeter(self):
		return 2 * math.pi * self.r
obj = Circle(4)
res1 = obj.area()
res2 = obj.perimeter()
print(res1,res2)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Python面向对象编程之类的引用

    目录 1.引用的概念 2.对象的拷贝 2.1 实例方法的引用 2.2 类的特性装饰器 3.类的名称修饰 3.1 _单下划线开头的名称修饰 3.2 _单下划线结尾的名称修饰 3.3 __双下划线开头的名称修饰 3.4 __name__双下划线开头和结尾的名称修饰 3.5 单下划线 4.Python的最小空类 1.引用的概念 引用 (Reference)是对象的指针 引用是内存中真实对象的指针,表示为变量名或者内存地址 每个对象存在至少一个引用,id()函数用于获得引用 在传递参数和赋值时,Pyth

  • Python面向对象三大特征 封装、继承、多态

    目录 1.封装 1.1 私有属性和私有方法 2.继承 2.1 方法的重写 2.2 在子类方法中调用父类方法 2.3 多继承 2.4 新式类和经典类 3.多态 1.封装 封装: 根据 职责 将 属性 和 方法 封装到一个 抽象的类 中将数据(属性)和行为(方法)包装到类对象中.在方法内部对属性进行操作,在类对象的外部调用方法.这样无需关心方法 内部的具体实现,从而隔离了复杂度 封装是面向对象编程的一大特点 面向对象编程的第一步.将属性和方法封装到一个抽象的类中 外界使用类创建对象,然后让对象调用方

  • Python面向对象编程之类的封装

    目录 1.封装的理解 2.私有类属性.公开类属性.私有实例属性和公开实例属性 2.1 公开类属性 2.2 私有类属性 2.3 公开实例属性 2.4 私有实例属性 2.5 私有属性不一定真的私有 3.私有方法和公开方法 4.类的保留属性 5.类的保留方法 1.封装的理解 封装(Encapsulation):属性和方法的抽象 属性的抽象:对类的属性(变量)进行定义.隔离和保护 分为私有属性和公开属性: 私有属性:只能在类内部访问 公开属性:可以通过类.对象名访问 可以选择公开或隐藏属性,隐藏属性的内

  • Python面向对象编程之类的继承

    目录 1.对继承的理解 2.类继承的构建 3.Python中最基础的类 4.ython类的重载 4.1 属性重载 4.2 方法重载 5.类的多继承 1.对继承的理解 继承(Inheritance) :代码复用的高级抽象 继承是面向对象设计的精髓之一 实现了以类为单位的高级抽象级别代码复用 继承是新定义类能够几乎完全使用原有类属性与方法的过程 不管是基类还是派生类,只是一种继承说法,这都是普通的Python类 也可以按子类.父类和超类划分. 最基础的类是基类,经过一次继承得出派生类,还可以再一次继

  • Python面向对象编程之类的概念

    目录 1.面向对象基本概念 1.1 万物皆对象 1.2 面向对象编程 1.3 面向对象的特征 2.Python面向对象的术语 3.Python类的构建 3.1 类的基本构建 3.2 类的构造函数 3.3 类的属性 3.4 类的方法 1.面向对象基本概念 1.1 万物皆对象 Python语言的中所有数据类型都是对象.函数是对象.模块是对象 Python所有类都是继承最基础的类object Python语言中的数据类型的操作功能都是类方法的体现 1.2 面向对象编程 面向对象编程又叫OOP(Obje

  • Python面向对象编程之类的运算

    目录 1.运算概念的理解 2.运算符的重载 2.1 算术运算符 2.2 比较运算符 2.3 成员运算 2.4 其他运算 3.Python类的多态 1.运算概念的理解 运算(Operation)是操作逻辑的抽象 运算体现一种操作逻辑,在广义角度来说任何程序都是一种运算 Python解释器通过保留方法预留了一批运算的接口,需要重载 保留方法一般对应运算符,Python中运算体现为运算符的重载 运算本质上体现了交互关系.包含关系和常规的操作关系 运算重载的限制 不能重载Python语言内置类型的运算符

  • python 面向对象三大特征详解

    目录 一.面向对象三大特征介绍 1.封装(隐藏) 2.继承 3.多态 二.继承 1.语法格式 2.类成员的继承和重写 3.super()获得父类定义 4.设计模式_工厂模式实现 5.设计模式_单例模式实现 总结 一.面向对象三大特征介绍 Python 是面向对象的语言,也支持面向对象编程的三大特性:继承.封装(隐藏).多态. 1.封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法. 通过"私有属性.私有方法"的方式,实现"封装".Python 追求简洁的语

  • Python全栈之面向对象基础

    目录 1. 面向对象oop了解 2. 对象的相关操作 小提示: 3. 类的相关操作 4. 类对象的删除操作 小提示: 5. 小练习 小提示: 答案: 总结 1. 面向对象oop了解 # ### oop 面向对象的程序开发 # (1) 类的定义 # 1 class Car: pass # 2 推荐 class Car(): pass # 3. class Car(object): pass # (2)类的实例化 class Car(): pass obj = Car() print(obj) #

  • python全栈要学什么 python全栈学习路线

    IT行业,技术要比学历.年龄.从业经验更为重要,技术水平直接决定就业薪资,想要学好python,首先要先了解精通Python语言基础.Python web开发.Python爬虫.Python数据分析这四大方面. 全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人.就是与这项技能有关的都会,都能够独立的完成. 全栈只是个概念,也分很多种类.真正的全栈工程师涵盖了web开发.DBA .爬虫 .测试.运维,要学的内容那是相当的巨量.就web开发方向而言需要学习的内容:前端知识 包

  • python全栈知识点总结

    全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人.就是与这项技能有关的都会,都能够独立的完成. 全栈只是个概念,也分很多种类.真正的全栈工程师涵盖了web开发.DBA .爬虫 .测试.运维,要学的内容那是相当的巨量.就web开发方向而言需要学习的内容:前端知识 包括HTML5 CSS3 JS Jquery Ajax,后端至少需要能够熟练使用Django和tornado,当然会flask更好. 扩展资料: 全栈工程师的厉害之处并不是他掌握很多知识,可以一个人干多份工作.而是

  • python全栈开发语法总结

    太多的小伙伴正在学习Python,就说自己以后要做全栈开发,大家知道这是做什么的吗?我们现在所知道的知识点,哪些是以后你要从事这个全栈所需要的呢?从名字上我们可以获知,"全"一样是掌握全部内容,没错,这里就是要自己掌握全部编程技能,足够独立开发的人,因此全栈士不如也说叫"全战士",如果想做,那就看下面能用到的语法吧. 1.中文编码-UTF8字符集 #!/usr/bin/env python # coding:utf8 2.数值 a = 1 b = 2.1 print

  • Python全栈之学习JS(1)

    目录 1. js的数据类型 1.1 js引入方式 1.2 注释变量 1.3 数据类型 2. js类型转换_运算符 2.1 强制转换_Number 2.2 强制转换_String 2.3 强制转换_Boolean 2.4 自动类型转换_Number_Boolean_String三者之间转换 2.5 js运算符 3. js流程控制 3.1 分支结构 3.2 分支结构_switch_case 3.3 循环结构 4. js函数 4.1 函数 4.2 函数的调用 总结 1. js的数据类型 1.1 js引

  • Python全栈之学习JQuery

    目录 1. lable标签补充 2. jquery引入和简单使用 3. 选择器 3.1 基础选择器 3.2 组合选择 3.3 层级选择器 3.4 属性选择器 3.5 表单对象属性选择器 3.6 表单选择器 3.7 筛选器方法 4. 文本操作 4.1 选择器优先级和类值操作 4.2 值操作 4.3 创建标签 4.4 文档操作 4.5 删除和清空标签 4.6 字符串占位符 总结 1. lable标签补充 <!DOCTYPE html> <html lang="en">

  • Python全栈之列表数据类型详解

    前言 列表(list)同字符串一样都是有序的,因为他们都可以通过切片和索引进行数据访问,且列表是可变的. 创建列表的几种方法 第一种 name_list = ['Python', 'PHP', 'JAVA'] 第二种 name_list = list(['Python', 'PHP', 'JAVA']) 创建一个空列表 >>> li = list() >>> type(li) <class 'list'> 把一个字符串转换成一个列表 >>>

  • Python全栈之递归函数

    目录 1. 递归函数 2. 递归练习 3. 小练习 总结 1. 递归函数 # ### 递归函数 """ 递归函数 : 自己调用自己的函数 , 叫做递归函数 递 : 去 归 : 回 一去一回叫做递归 """ def digui(n): print(n,"<==1==>") if n > 0: digui(n-1) print(n,"<==2==>") digui(5) "

  • Python全栈之单项循环

    目录 1. 多项_巢状分支 2. 循环结构 2.1 循环结构 2.2 单项循环的练习 3. 字符串的切片 4. 小练习 问题: 答案: 总结 1. 多项_巢状分支 2. 循环结构 2.1 循环结构 2.2 单项循环的练习 3. 字符串的切片 4. 小练习 问题: 答案: 总结 1. 多项_巢状分支 多项分支 (多选一) """ if 条件表达式1: code1 elif 条件表达式2: code2 elif 条件表达式3: code3 else: `code4 如果条件表达式

  • Python全栈之运算符详解

    目录 1. 算数_比较_赋值_成员 1.1 算数运算符 1.2 比较运算符 1.3 赋值运算符 1.4 成员运算符 2. 身份运算符 小提示: 3. 逻辑运算符 3.1 位运算符 3.2 小总结 4. 代码块_单项_双项分支 4.1 代码块 4.2 流程控制 4.3 单项分支 4.4 双项分支 5. 小作业 总结 1. 算数_比较_赋值_成员 1.1 算数运算符 算数运算符: + - * / // % ** # + var1 = 7 var2 = 90 res = var1 + var2 pri

随机推荐