码迷,mamicode.com
首页 > 编程语言 > 详细

python-面向对象

时间:2017-08-13 15:10:04      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:特征   对象   logs   名称空间   技能   import   首字母   另一个   数据   

1.面向过程

     -----什么叫做面向过程

      面向过程:处理事物的步骤、流程。  核心:过程

       优点:降低程序的复杂度          缺点:可扩展性差

2.面向对象

    ------面向对象:一切皆对象       核心:对象

      优点:解决了程序可扩展性差的问题

注:在python中变量表示特征,由函数表示技能,因而类是变量与与函数的结合体,对象是变量与方法(指向类的函数)的结合体

3.类

     类的概念:分类,共同特征与否判断一类还是不是一类,类是提取相同的特征

    在现实生活中:先有对象再有类,在程序中则是先有类,再有对象

定义类:就是定义变量与函数     首字母大写

***由一个抽象的东西加括号后跟冒号就产生一个类,返回值叫实例化对象,实例化触发__init__执行,__init__方法不能有返回值,实例化尽量不要调用类属性

class Person:   #定义一个人类      
    role=中国人   #     类属性    静态属性   
    def __init__(self,name,life_value,aggr):  #__init__方法     动态属性
        self.name=name         #姓名   动态属性
        self.life_value=life_value   #生命值    动态属性
        self.aggr=aggr       #攻击力    动态属性
    def attack(self,enemy):      #定义了一个攻击的类属性方法
        enemy.life_value=enemy.life_value-self.aggr    #对象的生命值
        print(攻击)
egg=Person(egon,1000,50)     #实例化这个对象    就等于执行Person.__init__()
print(egg.name)     #查看属性/调用方法        
print(egg.life_value)
print(egg.aggr)

实例化的过程就是类------对象的过程
self-----自动将实例化对象/实例本身传给__init__的第一个参数

程序之间的交互

class Person:
    role=中国人     # 类属性     静态属性
    def __init__(self,name,life_value,aggr):     #__init__方法   动态属性
#动态属性 self.name
=name #姓名
self.life_value
=life_value #生命值 self.aggr=aggr #攻击力 def attack(self,alex): #定义一个攻击的动态属性 alex.life_value-=self.aggr #alex的生命值 #egon.life_value-=self.aggr #egon的生命值
 # 实例化对象    查看属性/调用方法 egon
=Person(geon,1000,900) alex=Person(alex,500,100) print(egon.life_value) #egon未战斗之前的生命值 alex.attack(egon) #alex攻击egon print(egon.life_value) #egon战斗之后的生命值 print(alex.life_value) #alex未战斗之前的生命值 egon.attack(alex) #egon攻击alex print(alex.life_value) #alex战之后的生命值 class Dog: #定义狗类 def __init__(self,name,life_value,aggr): #__init__方法 动态属性
#动态属性 self.name
=name #名字 self.life_value=life_value #生命值 self.aggr=aggr #攻击力 def bite(self,Person): #定义狗咬的技能 egon.life_value-=self.aggr #egon的被攻击后的生命值 旺财=Dog(小强,500,200) #实例化dog对象 # #egon与旺财大战 print(egon.life_value) #狗未攻击egon之前egon的生命值 旺财.bite(egon) #狗攻击egon print(egon.life_value) #egon被攻击之后的生命值 print(旺财.life_value) #egon未打狗之前狗的生命值 egon.attack(旺财) ##egon打狗 print(旺财.life_value) #狗被打之后的生命值 #alex与旺财大战 print(alex.life_value) #alex没被狗攻击之前的生命值 旺财.bite(alex) #狗攻击alex print(alex.life_value) #alex被咬之后的生命值 print(旺财.life_value) #狗没挨打之前的生命值 alex.attack(旺财) #alex打狗 print(旺财.life_value) #狗受伤之后的生命值


4.类命名空间、实例命名空间

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

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

  • 静态属性就是直接在类中定义的变量
  • 动态属性就是定义在类中的方法
# #面向对象名称空间问题
class Person:
role=‘中国人’
pass egon.role
=印度人 print(egon.role,id(egon.role)) print(alex.role,id(alex.role)) print(Person.role,id(Person.role)) Person.role=印度人 print(egon.role,id(egon.role)) print(alex.role,id(alex.role)) print(Person.role,id(Person.role)) # #总结:在面向对象中,如果要调用一个属性,自己没有就会在类中找,如果自己有,就调用本身的

5.面向对象的组合与用法

 组合用法:在一个类中以另一个类的对象作为数据属性,这个类就称为类组合

示例

class 爷爷:
    def __init__(self,姓名,年龄,工作):
        self.姓名=姓名
        self.年龄=年龄
        self.工作=工作

class 爸爸:
    def __init__(self,姓名,年龄,工作):
        self.姓名=姓名
        self.年龄=年龄
        self.工作=工作

class 儿子:
    def __init__(self,姓名,年龄,工作,爷爷_姓名,爷爷_年龄,爷爷_工作):
        self.姓名=姓名
        self.年龄=年龄
        self.工作=工作
        self.爷爷=爷爷(爷爷_姓名,爷爷_年龄,爷爷_工作)
小强=儿子(小强,15,学生,霸刀,87,农民)
print(小强.爷爷.姓名,小强.爷爷.年龄,小强.爷爷.工作)
小强=爸爸(大强,50,农民)
print(小强.姓名,小强.年龄,小强.工作)

圆环实例

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 pi * self.r*2    #计算周长并返回
a=Circle(10)    #实例化一个圆对象
print(a.area())
print(a.perimeter())
class Ring:    #
    def __init__(self,r1,r2,p=3.14):
        self.r1_circle=Circle(r1)
        self.r2_circle=Circle(r2)
        self.p=p
    def area(self):
        return self.r1_circle.area()-self.r2_circle.area()
    def  perimeter(self):
        return self.r1_circle.perimeter()+self.r2_circle.perimeter()
a=Ring(10,5)
print(a.area())
print(a.perimeter())

6.面向对象的继承
   什么叫继承

     继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

 

python-面向对象

标签:特征   对象   logs   名称空间   技能   import   首字母   另一个   数据   

原文地址:http://www.cnblogs.com/mds---123/p/7353326.html

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