标签:特征 对象 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中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类
标签:特征 对象 logs 名称空间 技能 import 首字母 另一个 数据
原文地址:http://www.cnblogs.com/mds---123/p/7353326.html