python面向对象

(1)面向对象和面向过程
》面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

》面向对象的程序设计以对象为单位,把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

以一个例子来说明面向过程和面向对象在程序流程上的不同之处。

假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:

std1 = { ‘name’: ‘ly’, ‘score’: 90 }
std2 = { ‘name’: ‘Bob’, ‘score’: 81 }
而处理学生成绩可以通过函数实现,比如打印学生的成绩:

def print_score(std):
    print '%s: %s' % (std['name'], std['score'])

如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student这种数据类型应该被视为一个对象,这个对象拥有name和score这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后,给对象发一个print_score消息,让对象自己把自己的数据打印出来。

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_score(self):
        print '%s: %s' % (self.name, self.score)

(2)创建类和实例
类是抽象的,实例是具体的

class Test:
    def prt(self):
        print(self)
        print(self.__class__)

t = Test()//创建实例就是在类名后加个(),创建Text类的实例t
t.prt()//调用实例方法

结果:

<__main__.Test instance at 0x10d066878>
//说明self本身是一个实例,代表当前对象的地址
__main__.Test
//指向类

(3)实例属性
创建完实例后,可以自由地给一个变量绑定属性,同时可以通过“.”来访问属性,如先给实例stu绑定一个属性值name

std1=student()
std1.name="ly"
std1.score=90

可以通过std1.print_score()访问std1对象的属性值

》注意到init方法的第一个参数永远是self,表示创建的实例本身,因此,在init方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。有了init方法,在创建实例的时候,就不能传入空的参数了,必须传入与init方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去。
如:

std1=student("ly",90)

然后可以通过std1.print_score()访问属性值

完整的关于实例和对象的例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Role(object):
    ac=None
    def __init__(self,name,role,weapon,life_value):#初始化方法,self是实例本身,谁调用这个self就是谁
        self.name=name#成员变量
        self.role=role
        self.weapon=weapon
        self.life_val=life_value
    def buy_weapon(self,weapon):
        print("%s is buying [%s]"%(self.name,self.weapon))
        self.weapon=weapon
Role.ac="JP Brand"
p1=Role("lynn","police","B10", 90)
t1=Role("alex","terrorist","B11",100)
p1.buy_weapon("AK47")
t1.buy_weapon("B51")
p1.ac="China Brand"
print("p1:",p1.weapon,p1.ac)
print("t1:",t1.weapon,t1.ac)

运行结果:

lynn is buying [B10]
alex is buying [B11]
('p1:', 'AK47', 'China Brand')
('t1:', 'B51', 'JP Brand')

》你也可以通过一下函数的方式来访问属性:
》getattr(obj, name[, default]) : 访问对象的属性。
》hasattr(obj,name) : 检查是否存在一个属性。
》setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
》delattr(obj, name) : 删除属性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值