day22_面向对象

面向过程:

优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。

缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

面向对象:

优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。

# 定义类
# init方法------实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征
# self是什么 self拥有属性都属于对象
# 类中可以定义静态属性
# 类中可以定义方法,方法都有一个必须传的参数self
# 实例化
# 实例、对象
# 对象查看属性
# 对象调用方法

class Person:       # 类名,大驼峰
    country = "china"  # 创造了一个只要是这个类就一定有的属性(静态属性)

    def __init__(self,*args): # 初始化方法,self是对象,是一个必须传的参数
        # self就是一个可以存储很多属性的大字典
        self.name = args[0] # 往字典里添加属性的方式发生了一些变化
        self.age = args[1]
        self.hp = args[2]
        self.att = args[3]
        self.sex = args[4]

    def walk(self,n): # 方法,一般情况下必须传self参数,且必须写在第一个
                    # 后面还可以传其他参数,是自由的
        print("%s行走了%d步"%(self.name,n))

alex = Person("王二",27,100,10,"")
alex.walk(12)
print(Person.country)
print(alex.name)
print(alex.__dict__) # 查看所有属性
-----------------------------------------------------------------------
#人狗大战
class Dog:
def __init__(self,name,ph,att):
self.name = name
self.ph = ph
self.att = att
def bite(self,people):
people.ph -= self.att
print("%s咬了%s,%s剩余血量%d"%(self.name,people.name,people.name,people.ph))

class People:
def __init__(self,name,ph,att):
self.name = name
self.ph = ph
self.att = att
def attack(self,dog):
dog.ph -= self.att
print("%s打了%s,%s剩余血量%d" % (self.name, dog.name, dog.name, dog.ph))

jin = Dog('金老板',100,20,) # 实例化
alex = People('alex',999,998)
jin.bite(alex)
print(alex.ph)
 

# 定义类
# class
# 函数 : 方法 动态属性 # 类中可以定义方法,方法都有一个必须传的参数self
# 变量 : 类属性 静态属性 # 类中可以定义静态属性
# __init__方法 初始化方法
# python帮我们创建了一个对象self
# 每当我们调用类的时候就会自动触发这个方法。默认传self
# 在init方法里面可以对self进行赋值
# self是什么 self拥有属性都属于对象
#在类的内部,self就是一个对象
# alex = Person()
# alex.walk == Person.walk(alex)
# 实例化
# 对象 = 类(参数是init方法的)
# 实例、对象 完全没有区别
# 对象查看属性
# 对象.属性名
# 对象调用方法
# 对象.方法名(参数) #类名.方法名(对象名,参数)

原文地址:https://www.cnblogs.com/wzc27229/p/11134289.html