首页 > 编程语言 >Python基础27

Python基础27

时间:2022-11-02 17:13:03浏览次数:73  
标签:27 name val get Python 基础 atk dog print

今日内容概要

  • 面向对象之人狗大战
  • 面向对象编程思想
  • 面向对象之类与对象
  • 类与对象的创建
  • 对象独有的数据
  • 对象独有的功能

今日内容详细

面向对象之人狗大战

编写代码简单的实现人打狗 狗咬人的小游戏
'''推导步骤1 代码定义人和狗'''
person1 = {'name': 'jason',
        'age': 18,
        'gender': 'male',
        'p_type': '猛男',
        'atk_val': 999,
        'life_val': 100000}
dog1 = {'name': '小黑',
      'd_type': '泰迪',
      'atk_val': 100,
      'life_val': 8000}
# 如果需要多个人和狗需要重复编写上述字典
'''推导步骤2 将产生人和狗的字典封装成函数 并封装人和狗的攻击函数'''
def create_person(name, age, gender, p_type, atk_val, life_val):
	person = {'name': name,
          'age': age,
          'gender': gender,
          'p_type': p_type,
          'atk_val': atk_val,
          'life_val': life_val}
	return person
def create_dog(name, d_type, attack_val, life_val):
	dog = {'name': name,
        'd_type': d_type,
        'atk_val': atk_val,
        'life_val': life_val}
	return dog

def preson_atk(preson, dog):
	print(f'人{preson.get("name")}准备揍狗{dog.get("name")}')
	dog['life_val'] -= person.get('atk_val')
	print(f'人揍了狗一拳,狗{dog.get("name")}掉血{person.get('atk_val')},    剩余血量{dog.get('life_val')})
 
def dog_atk(dog, preson):
	print(f'狗{dog.get("name")}准备咬人{preson.get("name")}'
	person['life_val'] -= dog.get('atk_val')
	print(f'狗咬了人一口,人{preson.get("name")}掉血{dog.get('atk_val')},    剩余血量{person.get('life_val')})

p1 = create_person('jason', 18, 'male', '猛男', 8000, 99999999)
d1 = create_dog('小黑', '恶霸', 800, 900000)
person_atk(p1, d1)
dog_atk(d1, p1)

'''推导步骤3 人和狗的攻击混乱'''
person_atk(d1, p1)  # 变成狗揍人
dog_atk(p1, d1)  # 变成人咬狗
          
'''推导步骤4 如何实现只有人能调用人的攻击动作 狗只能调用狗的攻击动作
>>>:数据与功能的绑定'''
def get_person(name, age, gender, p_type, atk_val, life_val):
    # 产生人的函数(功能)
    def person_atk(person, dog):
        print(f"人:{person.get('name')}准备揍狗{dog.get('name')}")
        dog['life_val'] -= person.get('atk_val')
        print(f"人揍了狗一拳 狗掉血:{person.get('atk_val')}狗剩余血         量:{dog.get('life_val')}")
    # 表示人的信息(数据)
    person = {
        'name': name,
        'age': age,
        'gender': gender,
        'p_type': p_type,
        'atk_val': atk_val,
        'life_val': life_val,
        'person_atk': person_atk
    }
    return person
          
def get_dog(name, d_type, atk_val, life_val):
    def dog_atk(dog, person):
        print(f"狗:{dog.get('name')}准备咬人:{person.get('name')}")
        person['life_val'] -= dog.get('atk_val')
        print(f"狗咬了人一口 人掉血:{dog.get('atk_val')} 人剩余             血量:{person.get('life_val')}")
    dog = {
        'name': name,
        'd_type': d_type,
        'atk_val': atk_val,
        'life_val': life_val,
        'dog_atk': dog_atk
    }
    return dog
 
person = get_person('jason', 18, 'male', '猛男', 999, 1000000)
dog = get_dog('小黑', '恶霸', 100, 1000)
person.get('person_atk')(pseson, dog)
# 字典取值取到内层攻击函数名加括号调用并传入指定个数参数
          
'''面向对象和兴思想:数据与功能的绑定'''

编程思想

1.面向过程编程
	过程及流程 面向过程就是按照固定的流程解决问题
	需要例举出每一步的流程 并且随着步骤的深入 问题的解决越来越简单
	ps:提出问题 然后指定出该问题的解决方案
2.面向对象编程
	对象即容器 数据与功能的结合体(python中一切皆对象)
	面向对象编程有点类似于造物主的感觉 我们只需要创造出一个个对象 至于该对	象将来会如何发展跟程序员没有关系 也无法控制
	如 MOBA游戏中玩家操作的角色 只有基础属性 战绩的正负根据玩家操作 无法控    制
'''
两种编程思想没有优劣之分 需要结合实际需求而定
	如果是注册 登陆 肯定是面向过程更合适
	如果是游戏人物肯定是面向对象更合适
实际编程者两种思想是彼此交融的 只不过占比不同
'''

面向对象之类与对象

对象:数据与功能的结合体             对象才是核心
类:多个对象相同数据和功能的结合体      类主要是为了节省代码
'''
举例  不同物种进行分类
一个人          对象
一群人          人类(每个人都具有相同的特征 整合为一类)

一条狗          对象
一群狗          犬类(每条狗都具有相同的特征 整合为一类)
'''

现实生活中一般都是先有对象再有类
程序中如果想要产生对象 必须先定义类

类与对象的创建

面向对象并不是一门新技术 但是为了很好的区分开 针对面向对象设计了新的语法格式
python中一定要有类 才能借助于类产生对象

1.类的语法结构
class 类名:
	'''类体代码注释'''
	对象的公共数据
	对象的公共功能
'''
class是定义类的关键字
类名的命名与变量名几乎一致 需要注意的是首字母推荐大写用于后续区分
数据:变量名与数据值的绑定 功能(方法)其实就是函数
'''
2.类的定义与调用
	类在定义阶段就睡执行类体代码 但是属于类的局部名称空间 外界无法直接获取

# 需求:清华大学学生选课系统
# 定义类
class Student:
    # 对象公共的数据
    school_name = '清华大学'

    # 对象公共的功能
    def choice_course(self):
        print('学生选课功能')
# 查看名称空间
print(Student.__dict__)  # __dict__方法可以查看对应名称空间中所有的名字
# 取名称空间中的名字
print(Student.__dict__.get('school_name'))  # 清华大学
print(Student.__dict__.get('choice_course')) # choice_course所绑定的内存地址
'''在面向对象中 类和对象访问数据或者功能 可以统一采用句点符'''
print(Student.school_name)  # 等价于上述取名字
print(Student.choice_course)
'''类名加括号就会产生对象 并且没执行一次都会产生一个全新的对象'''
obj = Student()
obj1 = Student()
print(obj.__dict__)  # 对象自己目前什么都没有 但还是可以调用类中的名字
print(obj.school_name)  # 清华大学
# 修改类中的数据
Student.school_name = '哈尔滨佛学院'
print(obj.school_name) # 哈尔滨佛学院
'''数据和功能也可以统称为属性  数据>>>:属性名   功能>>>:方法'''

对象独有的数据

class Student:
    # 对象公共的数据
    school_name = '清华大学'

    # 对象公共的功能
    def choice_course(self):
        print('学生选课功能')
     
obj = Student()
obj1 = Student()
'''推导流程1 对象手动添加独有的数据'''
print(obj.__dict__)  # 将obj名称空间中的名字以字典的形式来展示
obj.__dict__['name'] = 'jason'  
# 此时的名称空间是字典的形式 可以通过添加键值对的方式在空间中添加数据
obj.__dict__['age'] = 18
print(obj.__dict__)
print(obj.name)
print(obj.age)  
print(obj1.__dict__)
obj1.__dict__['name'] = 'kevin'
obj1.__dict__['age'] = 28
print(obj1.__dict__)
print(obj1.name)
print(obj1.age)
'''推导流程2 将添加对象独有的数据封装成函数'''
def init(obj, name, age):
    obj.__dict__['name'] = name
    obj.__dict__['age'] = age
stu1 = Student()
stu2 = Student()
init(stu1, 'jason', 18)
init(stu2, 'kevin', 28)
print(stu1.__dict__)
print(stu2.__dict__)
'''推导流程3 给学生对象添加独有数据的函数 只有学生对象才有资格调用'''
class Student:
	school_name = '清华大学'
	def init(obj, name, age):
		obj.__dict__['name'] = name
		obj.__dict__['age'] = age
	def choice_course(self):
		print('学生选课系统')
stu1 = Student()
Student.init(stu1, 'jason', 18)
stu2 = Student()
Student.init(stu2, 'kevin', 28)
print(stu1.__dict__, stu2.__dict__)
'''推导步骤4 init方法变形'''
class Student:
	school_name = '清华大学'
	
	# 类产生对象的过程中会自动触发
	def __init__(obj, name, age):
		obj.__dict__['name'] = name
		obj.__dict__['age'] = age
	def choice_course(self):
		print('学生选课系统')
stu1 = Student('jason', 18)# 会自动将创建的对象传入__Init__中的第一个参数
print(stu1.__dict__)
print(sut1.name)
'''推导步骤5 变量名修改'''
class Student:
	school_name = '清华大学'
	def init(self, name, age):
		self.name = name
		self.age = age
	def choice_course(self):
		print('学生选课系统')
stu1 = Student('jason', 18)
print(stu1.name)
print(stu1.school_name)

对象的独有功能

class Student:
	school_name = '清华大学'
	def init(self, name, age):
		self.name = name
		self.age = age
	def choice_course(self):
		print('学生选课系统')
stu1 = Student('jason', 18) 
stu2 = Student('kevin', 28)
'''直接在全局定义功能'''
def eat():
	print('正在吃东西')
stu1.eat = eat
stu1.eat()
# eat函数所有人都能调用 就不是对象独有的了
'''只能将函数放在类中 但是类中的函数又是对象公共的
定义在类中的功能 默认就是绑定给对象使用的 谁来调用谁就是主人公
'''
class Student:
	school_name = '清华大学'
	def init(self, name, age):
		self.name = name
		self.age = age
	def choice_course(self):
		print('学生选课系统')
	def eat(self):
		print(f'{self.name}正在吃东西')
stu1 = Student('jason', 18)
stu2 = Student('kevin', 28)
stu1.eat()  # jason正在吃东西
# 对象调用会自动将对象当做第一个参数传入
stu2.eat()  # kevin正在吃东西

# 对象修改数据值
stu1.name = 'tom'    # 当点的名字存在的时候 会修改对应数据值
# 对象新增数据值
stu1.hobby = 'read'  # 当点的名字不存在的时候 会新增数据


标签:27,name,val,get,Python,基础,atk,dog,print
From: https://www.cnblogs.com/lzjjjj/p/16851617.html

相关文章

  • Hello python
    TheZenofPython,byTimPetersBeautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.Complexisbetterthancomplic......
  • Python的str函数及其对象
    str()一般是将数值转成字符串。repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了......
  • python 2.x 错误 ‘generator’ object has no attribute ‘_F_hawk189_新浪
    斐波那契数列:deff():a,b=1,1whileTrue:yieldaa,b=b,a+ba=f()foriinrange(10):print(a.___next___(),'')Attrib......
  • Python获取“双十一”商品评论,做词云分析,一个简单的案例教学
    前言环境使用Python3.8Pycharm模块使用requestsjieba结巴分词wordcloud词云数据来源分析明确需求<数据来源分析>采集数据是什么东西?......
  • Python基础之列表,元组,字典,集合,推导式,迭代器
    目录1列表1.1定义1.2访问列表中的值1.3更新列表1.4删除列表元素1.5Python列表脚本操作符1.6Python列表截取与拼接1.7嵌套列表1.8列表比较2元组2.1定义2.2创建......
  • Python基础之函数,面向对象
    目录1函数1.1定义一个函数1.2函数调用1.3参数1.3.1必需参数1.3.2关键字参数1.3.3默认参数1.3.4不定长参数1.3.4.1不定长*:元组1.3.4.2不定长**:字典1.3.5匿名......
  • CSS基础知识筑基
    01、CSS简介CSS指层叠样式表(CascadingStyleSheets),对HTML网页内容进行统一外观样式设计和管理,给网页进行各种装饰,让她变得美观,是HTML的化妆师。(Cascading:/kæsˈk......
  • Python处理刚刚,分钟,小时,天前等时间
    简介用爬虫获取目标网站数据后可能会遇见时间为处理刚刚,分钟,小时,天前等时间格式,如图解决问题:写了一个工具类来处理该问题,其中封装了两个函数1.将时间中的中文数字转......
  • python 中 if语句取反
     001、>>>str1=">aabbcc">>>ifstr1.startswith(">"):...print("yes")...yes>>>ifnotstr1.startswith(">"):##python中if语句取反...prin......
  • 数据库的基础操作
    数据库密码忘了怎么办?1.进入/etccdetc2.编辑my.cnfvimmy.cnf在文件内容末尾加上:skip-grant-tables保存退出wq3.重启mysql,然后mysql-uroot-p直接跳......