python面向编程:面向对象、init、绑定方法、案例练习
本文目录:
一、类的定义
1.什么叫做类?
类就是分类,类型的意思,一堆具备相同特征和行为的事物的抽象概念
2.类的作用?
用于描述该类的对象具备什么样的特征和行为
3.类的语法
调用import class
类名规范大写开头,驼峰命名法
class MyClass():
def __init__(self):
pass
def func(self):
pass
4.类定义阶段发生了两种情况
1.当包含该类的py文件被执行,就会创建类的名称空间
2.执行代码,将产生的名称放入名称空间
5.类的调用方式
class SHOldboyStudent:
# 描述该类对象的特征
school = "上海Oldboy"
name = "矮根"
age = 68
gender = "unknown"
print("========================") # 描述该类对象的行为 通过函数
def say_hi(abc):
print(abc)
print("hello oldBoy") #使用类中的属性
print(SHOldboyStudent.__dict__)
print(SHOldboyStudent.__dict__["name"])
print(SHOldboyStudent.name) # 使用类中的函数
print(SHOldboyStudent.__dict__["say_hi"])
print(SHOldboyStudent.say_hi)
# 使用类直接调用类中函数时 与普通函数没有任何区别 位self仅仅是一个置参数
SHOldboyStudent.say_hi(10)
二、面向对象的概念
1.面向过程
是一种编程思想,就是将复杂项目具体步骤化,先干什么后干什么
优点:把复杂的问题流程化,简单化,降低开发难度
缺点:扩展性差,维护性差,当前情况下用户需求千变万化 对扩展性要求非常高
使用场景:不需要扩展,或者多扩展性要求不高,例如:linux内核,shell脚本
2.面向对象
2.1什么是面向对象编程
也是一种编程思想,核心是对象,什么是对象在现实生活中实际存在,具备特征和行为的事物,
2.2面向对象编程的作用
面向对象编程:我们关注的点是.使用什么样的对象可以完成我的任务
例如:把大象装进冰箱,什么样的对象可以帮我完成这个任务,只要找到这个对象,命令它来做事情即可, 你从一个操作者 变成了指挥者, 例如:西游记中的如来,他要完成一 个传经,要把经书传到东土大唐取经,本来要自己去,但是太麻烦,所以找了唐僧师徒五个对象,来帮他完成这个任务
2.3面向对象编程优点和缺点
优点:1.对于 程序员来说,不需要在关心具体步骤
2.扩展性,一个单独个体特征或者行为发生时,不会影响到别人
缺点:1.程序的复读变高,你需要设计这些对象,注意要避免过度设计的问题
2.程序的执行结果可控性低
三、对象的使用
1.创建对象
class OldboyStudent:
#如果每个对象的属性都相同 才应该定义到类中,比如所有人的学校都上海oldboy
school = "上海oldboy"
2.语法调用
#创建对象,语法:在类后面加括号,与调用函数写法相同
stu = oldboyStudent()
#访问对象的属性
print(stu.school)
print(OldboyStudent.school)
3.属性的修改、增删
#修改属性的值
stu.school = "北京oldboy“
print(stu.school)
#增加属性
stu.room_num ="1008"
print(stu.room_num)
#删除属性
del stu.room_num
print(stu.room_num)
4.对象与类的名称空间是独立的关系
stu.school ="深圳oldboy“ #为对象的属性赋予新的值
print(OldboyStudent.School)#类中的属性不会变化
stu.room_num = "1008" #为对象增加属性
print(OldboyStudent.room_num)#类中不会出现新的属性
print(stu.__dict__)
print(OldboyStudent.__dict__)
5.对象的属性是相同的,就放到类中,做为一个公共的数据
stu.school#大家都是上海校区
print(stu2.__dict__)
print(stu1.__dict__)
stu2 = OldboyStudent()
print(stu2.__dict__)
stu1.school = "北京Oldboy"
print(stu1.__dict__)
6.对象的属性查找顺序
对象自己的名称空间--》类的名称空间
stu1 = OldboyStudent()
stu1.school = "newSchool"
print(stu1.school)
print(stu1)
四、__init__函数的使用
1.场景案例:
class Dog:
# 作为一只狗 应该有 昵称 age color gender
# 但是不能写到类中因为每个狗不一样
# name = "二哈" # __init__称之为初始化函数 它会在创建对象的时候自动执行
# 创建对象时
# .创建一个空对象
# .执行__init__函数 并且自动传入了这个对象 # 该函数的作用,就是为对象的属性赋初始值
def __init__(self,name,color,age,gender):
print("狗__init__执行了")
print(self)
self.name = name
self.age = age
self.color = color
self.gender = gender # dog1 = Dog()
# print(dog1)
# dog1.name = "二黄"
# dog1.age = ""
# dog1.color = "黄色"
# dog1.gender = "female"
#
#
# dog2 = Dog()
# print(dog1)
# dog2.name = "二哈"
# dog2.age = ""
# dog2.color = "白色"
# dog2.gender = "female" # 在创建对象时,传入参数
# print(Dog("大黄","黄色",,"female"))
dog1 = Dog("大黄","黄色",,"female")
# dog1 = Dog()
# dog1.__init__(dog1,"大黄","黄色",,"female") print(dog1.__dict__)
dog2 = Dog("二哈","白色",,"female")
print(dog2.__dict__)
2.__init__函数使用的注意点
1.使用场景,需要为每个对象定制不同的属性
2.__init__在创建对象后自动执行
3.第一个self参数 只的是这个对象本身 不需要手动传值
五、绑定方法
1.绑定案例:
class Person:
country = "China" def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def sleep(self):
print("sleeping")
print(self) def eat(self):
print("eating") # p1 = Person("矮根",68,"female")
# p2 = Person("成伟",18,"female") # 类调用类中函数 与 对象调用的区别
# p1.sleep()
# p2.sleep()
# print(Person.sleep)
# print(p1.sleep) # 类调用
# Person.sleep(10)
# 对象调用
# p1.sleep()
2.类与对象调用的区别
对于类而言,sleep就是一个普通的函数
对对象而言,sleep是一个绑定的方法
3.绑定方法是什么?
是对象与类中的某个函数的绑定关系,就像生活中我们都会吃放,我吃饭你不会 饱
那么吃饭就是我绑定的方法
4.为什么要把函数进行绑定?
因为对象的行为通常都需要访问这个对象的数据,或是修改这个对象的数据,如果没有对象,直接调用函数是没有意义的,在函数中访问不到对象的数据,所以将对象和函数进行绑定
5.绑定的特殊之处
在使用绑定方法时 不需要关心self参数,会自动将这个对象本身传进来,对象调用绑定方法时,最后执行的还是类中的那个函数
六、面向对象练习
# 王者荣耀 对砍游戏
# 两个英雄可以对砍 如果血量小于0 就GG
# 所需要的对象
# 英雄对象
"""
亚瑟
属性
类型
血量
名称
技能
Q 跳起来给你一刀 伤害50
W 给你一脚 30
E 大宝剑 100 妲己
属性
类型
血量
名称
技能
Q 给你一颗小星星 伤害10
W 给你一尾巴 30
E 色诱 100
"""
class Hero:
def __init__(self,hero_type,name,blood,q,w,e):
self.hero_type = hero_type
self.name = name
self.blood = blood
self.q = q
self.e = e
self.w = w def Q(self,enemy):
print("%s 对 %s 释放 Q技能 造成%s伤害 对方血量剩余%s"%
(self.name,enemy.name,self.q,enemy.blood - self.q))
# 对方血量减少
enemy.blood-= self.q
if enemy.blood <=0:
print("hero %s GG"% enemy.name) def W(self,enemy):
print("%s 对 %s 释放 w技能 造成%s伤害 对方血量剩余%s"%
(self.name,enemy.name,self.w,enemy.blood - self.w))
# 对方血量减少
enemy.blood-= self.w
if enemy.blood <=0:
print("hero %s GG"% enemy.name) def E(self,enemy):
print("%s 对 %s 释放 e技能 造成%s伤害 对方血量剩余%s"%
(self.name,enemy.name,self.e,enemy.blood-self.e))
# 对方血量减少
enemy.blood-= self.e
if enemy.blood <=0:
print("hero %s GG"% enemy.name) # 请选择你的英雄
yase = Hero("战士","亚瑟",200,50,30,100)
daji = Hero("法师","妲己",150,10,30,100) # 妲己在树林中发现了亚瑟 daji.E(yase)
yase.W(daji)
yase.E(daji)
yase.Q(daji)
王者荣耀
python面向编程:面向对象、init、绑定方法、案例练习的更多相关文章
- 利用 Python 尝试采用面向对象的设计方法计算图形面积及周长
利用 Python 尝试采用面向对象的设计方法.(1)设计一个基类 Shape:包含两个成员函数:def cal_area(): 计算并返回该图形的面积,保留两位小数:def cal_perimete ...
- python面向编程;类的绑定与非绑定方法、反射、内置方法
一.类的绑定与非绑定方法 ''' 类中定义函数分为了两大类: 1. 绑定方法 特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法: 在类中定义函数没有被任何 ...
- python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property
一.面向对象绑定方法 一.类中定义的函数分成两大类 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 ...
- Python—面向对象04 绑定方法
坚持把梳理的知识都给记下来....... 嗯哼哼 1.绑定方法与非绑定方法 在类内部定义的函数,分为两大类: 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 类.boud_m ...
- python中类与对象及其绑定方法的定义
面向对象编程 什么是面向对象? 面向过程:将需要解决的问题按步骤划分,一步一步完成每一个步骤,而且 步骤之间有联系. 优点:复杂问题可以分步完成 缺点:扩展性很差,维护性差.如果中间 ...
- python 封装,隐藏属性,绑定方法classmethod和staticmethod
[封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内容都隐藏起 ...
- python面向编程:阶段练习
1.所有程序都因该使用面向对象来设计吗?为什么? 不是,面向对象编程优点是扩展性高,对程序员来说不需要关心具体的步骤,只需要调用对象功能,缺点是:程序的复杂度变高,整体的可控性比较低! 2.什么是对象 ...
- python 3 属性查找与绑定方法
1.属性查找 类有两种属性:数据属性和函数属性 (1)类的数据属性是所有对象共享的 #类的数据属性是所有对象共享的,id都一样 class OldboyStudent: school='oldboy' ...
- python类中保存非绑定方法作为成员函数
习惯了函数式,动不动传一个函数.但是直接把函数作为类方法保存,再调用时会报错. 举一个unittest时的例子 class MyTestCase(unittest.TestCase): @classm ...
随机推荐
- web系统认证与鉴权中的一些问题
认证鉴权系统的初心: 空间管理: 1.他是谁? 他登陆了没有? 2.他要做什么? 2.1 他要使用什么功能? 他是否有这个功能的权限. 2.2 他要使用这个功能做什么操作? 他是否有这个功能的这个操作 ...
- web赛题
@php反序列化漏洞https://www.freebuf.com/news/172507.html @巅峰极客wp https://www.anquanke.com/post/id/189142 @ ...
- 【并行计算-CUDA开发】CUDA软件架构与Nvidia硬件对应关系
前面扯了很多,不过大多都是在讲CUDA 在软体层面的东西:接下来,虽然Heresy 自己也不熟,不过还是来研究一下硬体的部分吧-毕竟要最佳化的时候,好像还是要大概知道一下相关的东西的.这部分主要参考资 ...
- 腾讯云服务器的CPU ---发现大厂都很那啥
今天给同事看了下 腾讯云上面的ora从了数据库的启动问题 简单看了下 硬件配置如下: System: Host: VM_0_8_centos Kernel: -.el6.x86_64 x86_64 b ...
- IO(上)
1 输入流和输出流 输入流,数据从源数据源流入程序的过程称为输入流.可以理解为从源数据源读取数据到程序的过程. 输出流,数据从程序流出到目的地的过程称为输出流.可以理解为把数据从程序写入目的地的过程. ...
- 「java.util.concurrent并发包」之 ReentrantReadWriteLock
一 引言 在多线程的环境下,对同一份数据进行读写,会涉及到线程安全的问题.比如在一个线程读取数据的时候,另外一个线程在写数据,而导致前后数据的不一致性:一个线程在写数据的时候,另一个线程也在写,同样也 ...
- JSP与Servlet之间的交互,传值
一.Servlet 首先要明白一点,servlet需要容器的支持才能够运行,如Tomcat.jetty 达到servlet的请求,需要ServletRequest对象和ServletResponse对 ...
- YAPTCHA(HDU2973)【威尔逊定理】
威尔逊原理.即对于素数p,有(p-1)!=-1( mod p). 首先,将原式变形为[ (3×k+6)! % (3×k+7) + 1] / (3×k+7),所以: 1.3×k+7是素数,结果为1, 2 ...
- django初步了解2
目录 django初步了解2 表的字段增删改查 数据的增删改查 反向解析和分组 路由分发 名称空间 伪静态 虚拟环境 django初步了解2 表的字段增删改查 新增的字段 1.直接提供默认值 defa ...
- Jmeter之TCP取样器(模拟数据上报压测)
TCP压测 场景:模拟硬件设备上报数据(登录,心跳,GPS定位数据/光感数据/电量数据),对这个功能进行压测 啰嗦一句:TCP压测很简单,只要调通了一个TCP,后续的逻辑判断就用逻辑控制器和正则处理就 ...