1.定义
类:类是抽象的,一类事物的共性的体现。 有共性的属性和行为。
对象:具体化,实例化。有具体的属性值,有具体做的行为。
一个类 对应N多个对象。
类包含属性以及方法。
class 类名: 属性 方法
定义一个类:
class Preson: def eat(self): print("正在吃饭"); def sleep(self): print("正在睡觉")
2.类
2.1命名
类名:符合标识符的规定但是一般是每个单词的首字母大写。(驼峰命名)
2.2创建对象
属性写在类外的情况,就是通过对象.属性,对象.方法()的方法调用
对象的三要素:属性(对象是什么)、方法(对象能做什么)、事件(对象如何响应)
相互关系:类是对象的抽象,对象是类的实例,类是一种抽象事物的分类,对象是一种实例
2.3属性
概念:用于访问类字段的成员;
属性用途:保证数据的安全,作数据的验证;
例如:学生有哪些属性(昵称、学号、性别、年龄、班级、联系方式、城市)
对象属性的两种创建方式:
# self对象的载体 def __int__(self, name, age): # 创建对象属性 self.name = name self, age = age
2.4初始化方法
在创建类的实例的时候,会自动调用这个方法,一般是用户对实例属性初始化
class Person: def __init__(self, name, age): self.name = name self.age = age print("实例化类时,init方法就被调用了") p = Person("tom", 22) print(p.name) print(p.age) 结果: 实例化类时,init方法就被调用了 tom 22
2.5 Python中私有化特性
为了让外部无法访问属性或方法,只要在名字前面加上双下划线即可
对属性进行私有化 :__属性
对方法进行私有化:__方法()
class Secret: __name = 'yoda' # 加上双下划线私有化属性 def get_name(self): return self.__name def __secret(self): # 私有化方法 print("can't find")
3.类的语法
语法:
class 类名: # 属性 - 变量 # 行为 - 函数 def 行为1(self): # self是我 self是指的实例化对象本身。定义的时候不知道对象到底是谁,用self self.属性 self.行为N # 初始化 - 在实例化的同时,执行初始化工作。没有return的用法。 def __init__(self,[参数1,参数2.。]) ### 初始化工作 ### # 具体化实例化 实例名 = 类名([参数1,参数2.。。]) # 通过实例名称来访问实例的属性、做行为 实例名.属性 实例名.行为
实战例子:
""" 需求: 人和机器猜拳游戏写成一个类,有如下几个函数: 1)函数1:选择角色1 曹操 2张飞 3 刘备 2)函数2:角色猜拳1剪刀 2石头 3布 玩家输入一个1-3的数字 3)函数3:电脑出拳 随机产生1个1-3的数字,提示电脑出拳结果 4)函数4:角色和机器出拳对战,对战结束后,最后出示本局对战结果...赢...输。 5)函数5:显示整个游戏过程中,角色赢几局 电脑赢几局,平局几次。 一次猜拳结束后,要提示用户是否继续?按y继续,按n退出。 最后结束的时候输出结果 角色赢几局 电脑赢几局,平局几次 游戏结束 """ import random class GussesGame: datas = {"1": "剪刀", "2": "石头", "3": "布"} def __init__(self): self.user_game_result = [0, 0, 0] # win,lose,tie # 选择角色 def select_role(self, role_index): roles = {"1": "曹操", "2": "张飞", "3": "刘备"} if str(role_index) in roles.keys(): print("您选择的角色为{}".format(roles[str(role_index)])) # 角色出拳 def _role_finger_punch(self): number = input("请出拳(1剪刀 2石头 3布),出数字即可:") if number.isdigit() and number in self.datas.keys(): print("角色出拳为:{}".format(self.datas[str(number)])) return int(number) else: print("角色出拳错误!!角色可出拳仅限为 1剪刀 2石头 3布") # 电脑出拳 def _computer_finger_punch(self): number = random.randint(1, 3) if str(number) in self.datas.keys(): print("电脑出拳为:{}".format(self.datas[str(number)])) return number # 人机对战 def battle(self): # 用户出拳 role_number = self._role_finger_punch() # 电脑出拳 computer_number = self._computer_finger_punch() # PK if computer_number is not None and role_number is not None: if (role_number, computer_number) in [(1, 3), (2, 1), (3, 2)]: print("恭喜,你赢了!一统江湖!") self.user_game_result[0] += 1 elif role_number == computer_number: print("平局!实力不相上下!") self.user_game_result[2] += 1 else: print("噢嗬!你败了!手下败将,敢不敢再来一局!") self.user_game_result[1] += 1 else: print("人机猜拳失败!!原因是某一方出拳不符合要求!") # 是否继续玩 is_go_on = input("还没尽兴?是否继续?按y继续,按n退出。") if is_go_on == "y": return True else: return False # 战果显示 def show_user_game_result(self): print("角色在本轮游戏当中的战果为:{}胜{}败{}平局".format(*self.user_game_result)) if __name__ == "__main__": # 游戏 开始 one = GussesGame() # 选角 one.select_role(1) while True: # 人机battle is_go_on = one.battle() # 继续battle吗 if is_go_on is False: print("不玩了,拜拜!!") break # battle的最终结果 one.show_user_game_result()