码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象编程二

时间:2018-03-06 20:19:38      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:kill   计算   ret   ==   def   agg   img   png   color   

类命名空间与对象、实例的命名空间

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

而类有两种属性:静态属性和动态属性

  • 静态属性就是直接在类中定义的变量  #只要使用静态属性,就用类名去调用,全局生效
  • 动态属性就是定义在类中的方法

其中类的数据属性是共享给所有对象的

创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

技术分享图片

 

例1:写一个类,能统计这个类被多少个对象实例化了.

  所有的对象共享这个结果

  定义静态变量

class SS:
    count=0
    def __init__(self):
        SS.count+= 1

shili1=SS()
shili2=SS()
shili3=SS()
print(SS.count)

 

例2:

圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用

from math import pi

class Circle:
    def __init__(self,r):
        self.r=r

    def area(self):
        return  pi*(self.r**2)

    def perimeter(self):
        return 2*pi*self.r

r10=Circle(10)      #实例化圆环
area1=r10.area()    #计算圆面积
perimeter1=r10.perimeter()  #计算圆周长
print(area1,perimeter1)

class Ring:
    def __init__(self,r_out,r_in):
        self.r_out=Circle(r_out)
        self.r_in=Circle(r_in)

    def area(self):
        ring_area=self.r_out.area()-self.r_in.area()
        return ring_area

    def perimeter(self):
        ring_perimeter = self.r_out.perimeter() + self.r_in.perimeter()
        return ring_perimeter

ring=Ring(10,5)     #实例化一个环
r_a=ring.area()     #计算环的面积
r_p=ring.perimeter()    #计算环的周长
print(r_a)
print(r_p)

 

例3:

用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python课程

参考:
class Birthday:
    def __init__(self,year,month,day):
        self.year = year
        self.month = month
        self.day = day
class Teacher:
    def __init__(self,name,sex,course,birth):
        self.name = name
        self.sex = sex
        self.course = course
        self.birth = birth   # birth是一个对象

birth = Birthday(1960,3,7)   # birth 是Birthday类的一个对象
alex = Teacher(alex,male,python,birth)
# alex.birth = birth
# time
1960-3-7
# 老师的年龄  2018 - 1960


print(birth)
import time
if birth.month == time.localtime().tm_mon  and     birth.day == time.localtime().tm_mday:
    print(生日快乐)

print(time.localtime().tm_year - birth.year)

 

实践:

class Birthday:
    def __init__(self,year,month,day):
        self.year=year
        self.month=month
        self.day=day

class Teacher:
    def __init__(self, name, sex, course,birth):
        self.name=name
        self.sex=sex
        self.course=course
        self.birth=birth
birth=Birthday(1987,6,17)
zhang=Teacher(zhang,,python,birth)
print(birth)
print(zhang.birth.day)

 

例4:

人狗大战-武器版

class Person():     #定义玩家
    def __init__(self,name,aggress,hp,money):   #定义对象的各种属性
        self.name=name
        self.aggress=aggress
        self.hp=hp
        self.money=money

    def attack(self,dog):
        dog.hp-=self.aggress    #狗被攻击后的血量

class Dog():
    def __init__(self,name,kind,aggress,hp):    #定义狗的各种属性
        self.name=name
        self.kind=kind
        self.aggress = aggress
        self.hp = hp

    def bite(self,persons):     #人被狗咬后的血量
        persons.hp-=self.aggress

class Weapen:
    def __init__(self,name,price,aggress,hp):   #定义武器的各种属性
        self.name = name
        self.aggress = aggress
        self.hp = hp
        self.price = price

    def update(self,man):       #装载武器后添加属性
        man.money-=self.price
        man.aggress+=self.aggress
        man.hp+=self.hp

    def skill(self,obj):    #武器技能,被攻击者血量-500
        obj.hp-=500

player=Person(王大锤,200,3000,8800)  #实例化一个玩家
hei_2=Dog(哮天犬,狼狗,300,1500)  #实例化一条狗
brick=Weapen(板砖,5000,300,1000)    #实例化一件武器

if player.money>=brick.price:
    brick.update(player)
    player.weapen=brick

print(玩家的剩余金钱为%d,玩家的血量为%d,玩家的攻击力为%d%(player.money,player.hp,player.aggress))
print(哮天犬的血量为%d%hei_2.hp)
player.attack(hei_2)
brick.skill(hei_2)
print(当玩家用武器攻击哮天犬后,哮天犬的血量为%d%hei_2.hp)

 

面向对象编程二

标签:kill   计算   ret   ==   def   agg   img   png   color   

原文地址:https://www.cnblogs.com/strive-man/p/8516065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!