python初识面向对象(一)

问题:什么是对象

世间一切万物皆是“对象” 一个人 一棵树 一朵花 只要是存在的事物 都可以被称之为“对象”
对象的形态千千万万,如果加以管理呢,所以世界上出现了大陆,不同的大陆分割着不同大洲,不同的大洲区分这不同的国家,不同的国家又有不同的省份 类推...
类比到程序中,我们想要完成一个庞大的项目时需要写出许许多多的功能,这一个个的功能形态各异 姿态万千,我们如果能区分并分别管理他们呢?
我们把这一个个模块 通过相似的功能 给分类,分完类再分工,这样整个项目就能扁平化铺开,每个人负责一块,这样才最有效率。

对象和类

世间万物皆可分类,一花一草  一树一木 一人一畜 
人分为男人 女人 老人 小孩, 动物分为 猫 狗 鼠...  这些个事物都是对象,但是他们都能找到一个共同点,人 和 动物,植物....
所以 类 可以理解为他们的共同特征。 
人:有手脚 能说话 站立行走 
动物 :有毛发 四肢行走 这样就产生了类。

那么 请思考,为什么要有类呢

为什么要有类

一家啤酒瓶厂,每天产出啤酒瓶为10几万个,我们看到自动生产线上的机器直接将玻璃水做成了啤酒瓶,这是怎么做到的呢?
这是因为,人们将制作方法,工艺,材料,温度,过程,输入到了机器中,这样。
玻璃融化生产线,直接调用电脑的温度数据
材质生产线,直接调用材料的数据
机器直接调用制作方法和工艺的数据
这样,这条生产线就完成了自动生产。
对于各个生产线来说,这台中心电脑的数据 则是自己的类。 那么 这个例子和我们程序有什么关系呢?

 面向对象编程

面向对象编程
例:我们要利用python开发一款模拟人生的游戏,现在我要创造一个人物
这个人物有人类的特征,会吃饭,战斗,情感表现。
但是,这个游戏会有很多的人物,所以我们把这些个共通特征创建为一个类,在类种创建更多种功能:方法,把吃饭,战斗,表现集成到类中
这样每一个人物都来调用类中的方法,这样,就大量节约了开发成本,并且增加了代码的逻辑性!

以上就是我对面向对象的理解

那么,如何来编写一个面向对象的程序呢?

class person(object):
    #country = '中国'
    def __init__(self):
        pass
    def eating(self):
        print 'im eating '
    def play(self):
        print 'im playing'
    def kiss(self):
        print 'give me one kiss'
me = person()#类的实例化
me.kiss()
me.eating()
#print 'me 是 类person 的实例对象,通过实例化后 me对象就可以阴用类中的方法'

类的特性:

类中有哪些成员呢?
类包含,字段,方法,属性。
但是每个成员中,都包含私有成员 所以说类中有  普通字段 私有字段 普通方法 私有方法 普通属性 私有属性


字段

普通字段
class
Person: name = 'alex' age = 18 P1 = Person() #实例化了一个对象P1 print P1.name #然后就可以通过P1来读取属性了 print P1.age # name , age 是类的公有属性 # 可以直接在类外通过对象名访问,私有属性,需在前面加2个下划线'__'即可。
上面说到私有属性,那么私有属性能否被访问呢
私有字段
class
Person: __name = 'alex' #创建了私有字段 __age = 18 P1 = Person() #实例化了一个对象P1 print P1.Person.__name #然后就可以通过P1来读取私有属性了 print P1.Person.__age
 不过这里建议,既然是私有属性,那么就不应该随意去访问它

 方法

普通方法
class
person(object): #country = '中国' def __init__(self): pass def eating(self): print 'im eating ' def play(self): print 'im playing' def kiss(self): print 'give me one kiss' me = person()#类的实例化 me.kiss() me.eating() #print 'me 是 类person 的实例对象,通过实例化后 me对象就可以阴用类中的方法'

私有方法 调用
class
person(object): #country = '中国' def __init__(self): pass def __eating(self): #私有方法是不允许对象直接调用的, 如果像调用可以间接调用 print 'im eating ' def d_eating(self): return person.__eating #通过在类中的一般方法来调用私有方法 def __play(self): print 'im playing' def __kiss(self): print 'give me one kiss' me = person()#类的实例化 me.d_eating() me.eating()#这种调用 是错误 #print 'me 是 类person 的实例对象,通过实例化后 me对象就可以阴用类中的方法'

属性

什么是属性呢,请看下面代码
class person(object):
    #country = '中国'
    def __init__(self):
        pass

  @property #属性和方法的区别是,这里使用了一个装饰器函数 def eating(self): print 'im eating ' me = person()#类的实例化 me.eating #重要的是,在对象调用属性的时候,直接按照调用字段的方式就可以了, 这样就把方法伪造成了普通字段。并且意义就这里!
定义属性有两种方式
1,经典类
# ############### 定义 ###############    
class Goods:

    @property
    def price(self):
        return "wupeiqi"
# ############### 调用 ###############
obj = Goods()
result = obj.price  # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
2,新式类
# ############### 定义 ###############
class Goods(object):

    @property
    def price(self):
        print '@property'

    @price.setter
    def price(self, value):
        print '@price.setter'

    @price.deleter
    def price(self):
        print '@price.deleter'

# ############### 调用 ###############
obj = Goods()

obj.price          # 自动执行 @property 修饰的 price 方法,并获取方法的返回值

obj.price = 123    # 自动执行 @price.setter 修饰的 price 方法,并将  123 赋值给方法的参数

del obj.price      # 自动执行 @price.deleter 修饰的 price 方法
新式类的集中访问方法
lass Goods(object):

    def __init__(self):
        # 原价
        self.original_price = 100
        # 折扣
        self.discount = 0.8

    @property
    def price(self):
        # 实际价格 = 原价 * 折扣
        new_price = self.original_price * self.discount
        return new_price

    @price.setter
    def price(self, value):
        self.original_price = value

    @price.deltter
    def price(self, value):
        del self.original_price

obj = Goods()
obj.price         # 获取商品价格
obj.price = 200   # 修改商品原价
del obj.price     # 删除商品原价

 

posted @ 2015-12-08 10:15  一只小强  阅读(247)  评论(0编辑  收藏  举报