面向对象

面向对象

面向对象的思想:
对象就是一个实实在在的,可以准确描述出来的实体
面向对象编程:---是一种上帝视角的切换
之前写的面向过程的编程是面向结果去编程,一个流水线下来有固定的结果,
优缺点:容易想,可扩展性差,容易引起代码的安全问题
面向对象

类:具有相同属性和方法的一类事物
对象:具有具体的属性的事物

定义一个类:
class 类名:#类名首字母大写
    属性 = "功能"#---类的属性:静态属性,不是必须要定义的,当多有的对象都用的时候去定义
    def __init__(self,参数):#--self是不需要传的
        #__init__这里是定义了一个该类对象共有的属性
        #这里的属性是对象属性,
        self.key = 参数#---这里self.key就相当于字典的key,参数就相当于value
    def 方法(self):  #--类里面的方法本质上就是函数--函数必须要传一个参数self
        pass

print(类名.属性)
#实例化一个对象
对象 = 类名("参数")#---参数是传到__init__函数里
    #--实例化,对象就是实例

对象.函数名()#---调用成功,传入的self就是对象,
    #当用一个对象去调用对他的方法的时候,自动传入的一个参数,这个参数就是对象本身
定义一个类

 

静态属性,所有的对象共有的属性,可以直接调用
对象属性,是属于某一个对象的,只能在实例化之后对象调用
类里边凡是用def去定义的都是动态属性或者叫方法
面向对象什么时候用----需要反复的传相同的参数给一些函数的时候

class Dog:
    role = "dog"

print(Dog.role)

 


小结:
类名--调用类属性,查看类方法
对象名--调用对象属性,调用类属性(尽量不要)
对象名调用方法 --方法也叫动态属性



面向对象的交互

class Person:#---定义了一个人类
    role = "person"#---人类的属性就是人,静态属性,可以不定义,可以直接调用
    def __init__(self,name,sex,aggr=200):#---定义一些关于人类对象共有属性的函数,里面都是对象属性
        self.name = name#---名字
        self.sex = sex#---性别
        self.aggression = aggr#---攻击力
        self.blood = 20000#---血量
    def attack(self,person):#---定义了一个攻击的函数,这是定义了方法,对象实例化后才能去调用它
        person.blood = person.blood - self.aggression#---self攻击person,person被攻击,所以他的血量要减少,
        print("%s攻击%s"%(self.name,person.name))#---打印一个self攻击person


alex = Person("alex","male")#---#对象的实例化
egon = Person("egon","male",300)#---#对象的实例化
alex.attack(egon)#---调用攻击函数alex攻击egon
print(alex.blood,egon.blood)
egon.attack(alex)#---调用攻击函数egon攻击alex
print(egon.blood,alex.blood)
定义一个类和类内方法详解

 

'''
练习一:在终端输出如下信息

小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张…

'''
class Person:
    def __init__(self,name,age,sex=""):
        self.name = name
        self.age = age
        self.sex = sex
    def kanchai(self):
        print("%s,%s岁,%s,上山去砍柴"%(self.name,self.age,self.sex))
    def kaiche(self):
        print("%s,%s岁,%s,开车去东北"%(self.name,self.age,self.sex))
    def baojian(self):
        print("%s,%s岁,%s,最爱大保健"%(self.name,self.age,self.sex))

xiaoming = Person("小明",10)
xiaoming.kanchai()
xiaoming.kaiche()
xiaoming.baojian()
laozhang = Person("老张",90)
laozhang.kanchai()
laozhang.baojian()
laozhang.kaiche()
Code1
class Person:
    role = "preson"
    def __init__(self,name,sex,aggressive=200):
        self.name = name
        self.sex = sex
        self.aggr = aggressive
        self.blood = 20000
    def attack(self,person):
        print("%s attack %s"%(self.name,person.name))
        person.blood = person.blood - self.aggr

class Dog:
    role = "dog"
    def __init__(self,name,sex,aggressive=50):
        self.name = name
        self.sex = sex
        self.aggr = aggressive
        self.blood = 20000
    def bite(self,person):
        print("%s bite %s"%(self.name,person.name))
        person.blood = person.blood - self.aggr

alex = Person("alex","male",250)
egon = Dog("egon","",500)
while alex.blood:
    alex.attack(egon)
    egon.bite(alex)
    print(alex.blood,"%s阵亡"%(alex.name))
    print(egon.blood)
初阶人狗大战
from math import pi#---得到精确地π值
class Circle:
    rloe = "circle"
    def __init__(self,r):
        self.r = r
    def length(self):
        return 2*pi*self.r
    def area(self):
        return pi*self.r*self.r


val = Circle(10)
val_l = val.length()
print(val_l)
val_s = val.area()
print(val_s)
例子--圆

 

作业:
class Rectangle:
    role = "retangle"
    def __init__(self,long,wide):
        self.long = long
        self.wide = wide
    def length(self):
        return 2*(self.long+self.wide)
    def area(self):
        return self.long*self.wide

rect = Rectangle(3,4)
ret_l = rect.length()
print(ret_l)
ret_a = rect.area()
print(ret_a)
计算长方形的面积:
class Person:
    role = "preson"
    def __init__(self,name,sex,aggression=200):
        self.name = name
        self.sex = sex
        self.aggr = aggression
        self.blood = 2000
    def attack(self,dog,n):
        dog.blood = dog.blood - self.aggr
        print("%s 第%d次攻击 %s,%s的血还有%s"%(self.name,n,dog.name,dog.name,dog.blood))
        if dog.blood<=0:
            print("很遗憾,%s is game over"%dog.name)

class Dog:
    role = "dog"
    def __init__(self,name,breed,aggression=50):
        self.name = name
        self.breed = breed
        self.aggr = aggression
        self.blood = 2000
    def bite(self,person,m):
        person.blood = person.blood - self.aggr
        print("%s 第%d次咬 %s,%s的血还有%s"%(self.name,m,person.name,person.name,person.blood))
        if person.blood<=0:
            print("很遗憾,%s is game over"%person.name)


def player_choice(play_person,play_dog):
    n = 0
    m = 0
    while True:
        choice = input("请选择人或狗攻击:")
        if choice.strip() == "":
            n += 1
            play_person.attack(play_dog,n)
        elif choice.strip() == "":
            m += 1
            play_dog.bite(play_person,m)
        elif choice.strip().lower() == "q":
            print("即将退出游戏,请稍等...")
            break
        else:
            print("输入的角色名错误")


def player():
    play_person_name = input("play_person_name:")
    play_person_sex = input("play_person_sex:")
    play_person_aggression = int(input("play_person_aggression:"))

    play_person = Person(play_person_name,play_person_sex,play_person_aggression)

    play_dog_name = input("play_dog_name:")
    play_dog_breed = input("play_dog_sex:")
    play_dog_aggression = int(input("play_dog_aggression:"))

    play_dog = Dog(play_dog_name,play_dog_breed,play_dog_aggression)

    player_choice(play_person,play_dog)


player()
# 人狗大战进阶

 



posted @ 2017-09-14 15:17  chitalu  阅读(102)  评论(0)    收藏  举报