面向对象

# def 函数名():
# '''函数体'''
# pass
# class Person:#类名有两个作用
# country = '中国'#静态属性,数据属性
# def walk(self):#动态属性,函数属性,方法
# print('walk')
#1,属性引用
# print(Person.country)#静态属性的查看
#print(Person.walk)
# Person.role = '人'#添加一个新静态属性
# Person.country = '孝感' #修改一个新静态属性
# del Person.role #删除一个静态属性
# print(Person.__dict__)
# print(Person.walk())#报错 少self参数
# Person.__dict__['country'] = '孝感'报错 不能改变
# print(Person.__dict__['country'])
# print(Person.country)

# 类能完成的第二个功能,实例化对象
# 实例化:从一个类中创造一个具体的对象的过程
# p = Person()
# print(p)#Person的对象

class Person:
country = '中国'
def __init__(self,life_value,aggr,name,job,):#初始化方法
# self = {'lv':life_value}
self.lv = life_value#属性,对象属性
self.aggr = aggr
self.name = name
self.job = job
def walk(self):
print("%s is walking"% self.name)
# p = Person() #如何让对象拥有具体的属性
p = Person(1000,2,'金老板','boss')#如何让对象拥有具体的属性
# p.walk()
# print(p.lv)
# print(p.name)
# print(p.job)
# p.sex = 'xiaoxiao' #添加一个属性
# print(p.sex)
# print(p.__dict__)
# p.sex = 'girl' #属性的修改
# print(p.sex)
# del p.sex

# print(p.__dict__)
# print(p.__dict__['lv'])#查看
# p.lv = '998'
# print(p.lv)
# p.__dict__['lv'] = 998#对象名.__dict__中的属性值可以被修改
# print(p.__dict__['lv'])
# p.__dict__['sex'] = 'lady_boy'#对象名.__dict__中的属性值可以增加
# print(p.__dict__)
# p.__dict__.pop('sex')#对象名.__dict__中的属性值可以被删除
# print(p.__dict__)

# 类
# 类的定义class关键字 类名的首字母大写
# 类中直接定义属性:静态属性(变量)和动态属性(函数)
# 类名的两个作用:属性的引用,实例化对象
# 类名和属性的操作:对象名,属性名,对象名。__dict__[’属性名‘](不能修改)
#
# 实例化 -- 类名(参数)
# 构造方法:造对象
# 初始化__init__:给这个赤裸裸的对象添加一些属性__init__
# 返回一个初始化之后的对象
# __init__方法:初始化方法可以没有,给对象添加一些必要的基础属性
# self的含义:就是这个对象本身
# 对象和属性的操作:对象名,属性名,对象名.__dict__['属性名']


class Person: #类名有两个作用
country = '中国' #静态属性、数据属性
def __init__(self,life_value,aggr,name,job): #初始化方法
#self = {'lv':life_value}
self.lv = life_value #属性,对象属性
self.aggr = aggr
self.name = name
self.job = job
def walk(self): #动态属性、函数属性、方法
print('%s is walking'%self.name)

boss_gold = Person(10,1,'太白太黑太亮','old_driver')
alex = Person(100,2.5,'张嘴闭嘴tesla','鸡汤哥')
# boss_gold.walk()
# alex.walk()
boss_gold.sex = 'None'
print(alex.__dict__)


# 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做 < 人狗大战 > 的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢?
#
# 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色
# def person(name,age,sex,job):
# data = {'name':name,
# 'age':age,
# 'sex':sex,
# 'job':job}
# return data
# def dog(name,dog_type):
# data = {'name':name,
# 'type':dog_type
# }
# return data
# # 上面两个方法相当于造了两个模子,游戏里的每个人和每条狗都拥有相同里的属性。游戏开始,你根据一个人或一只狗传入的具体信息来塑造一个具体的人或者狗,怎么生成呢?
# d1 = dog('师功哲','土狗')
# p1 = person('朱博',23,'f','python')
# # 两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗,对不对? 怎么实现呢,。。想到了, 可以每个功能再写一个函数,想执行哪个功能,直接 调用 就可以了,对不?
# def bark(d):
# person('dog%s:wang.wang...'%d['name'])
# def walk(p):
# print('person %s is walking..'%p['name'])
# walk(p1)
# bark(d1)
# 事实 上,从你写的代码上来看,这并没出错。很显然,人是不能调用狗的功能的,但在你的程序例没有做限制,如何在代码级别实现这个限制呢?
# def person(name, age, sex, job):
# def walk(p):
# print("person %s is walking..." % p['name'])
#
# data = {
# 'name': name,
# 'age': age,
# 'sex': sex,
# 'job': job,
# 'walk': walk
# }
# return data
# def dog(name, dog_type):
# def bark(d):
# print("dog %s:wang.wang..wang..." % d['name'])
# data = {
# 'name': name,
# 'type': dog_type,
# 'bark': bark
# }
# return data
# d1 = dog("李磊", "京巴")
# p1 = person("严帅", 36, "F", "运维")
# p2 = person("egon", 27, "F", "Teacher")
# d1['bark'](p1) #把人传给了狗的方法


# import random
# class Ren:
# def __init__(self,life_value,agger,name,job):
# self.lv =life_value
# self.agger=agger
# self.name =name
# self.job=job
# def attack(self,gou):
# i = random.randrange(2)
# print("%s 攻击了 %s"%(self.name ,gou.name ))
# if i == 0:
# print("%s闪避了%s的攻击"%(gou.name ,self.name ))
# else:
# gou.lv -=self.agger
# print("%s血量%d"%(gou.name ,gou.lv ))
# class Gou:
# def __init__(self,life_value,agger,name,king):
# self.lv = life_value
# self.agger = agger
# self.name = name
# self.king = king
#
# def attack(self, ren):
# i = random.randrange(2)
# print("%s 攻击了 %s" % (self.name , ren.name ))
# if i ==0:
# ren.lv =ren.lv - self.agger*2
# print("暴击-%d"%(self.agger*2))
# else:
# ren.lv =ren.lv - self.agger
# print("%s血量%d" % (ren.name
#
# , ren.lv ))
#
# dahuang=Gou(100,20,"大黄","狼狗")
# jin=Ren(100,20,"老金","奶爸")
# # jin.attack(dahuang)
# # # print(dahuang.lv )
# # print("++++++++++")
# # dahuang.attack(jin)
# while dahuang.lv >0 and jin.lv >0:
# jin.attack(dahuang)
# print(" ")
# dahuang.attack(jin)
# print("------------")
原文地址:https://www.cnblogs.com/zhuchuanbo/p/7852958.html