问题:什么是对象
世间一切万物皆是“对象” 一个人 一棵树 一朵花 只要是存在的事物 都可以被称之为“对象” 对象的形态千千万万,如果加以管理呢,所以世界上出现了大陆,不同的大陆分割着不同大洲,不同的大洲区分这不同的国家,不同的国家又有不同的省份 类推... 类比到程序中,我们想要完成一个庞大的项目时需要写出许许多多的功能,这一个个的功能形态各异 姿态万千,我们如果能区分并分别管理他们呢? 我们把这一个个模块 通过相似的功能 给分类,分完类再分工,这样整个项目就能扁平化铺开,每个人负责一块,这样才最有效率。
对象和类
世间万物皆可分类,一花一草 一树一木 一人一畜 人分为男人 女人 老人 小孩, 动物分为 猫 狗 鼠... 这些个事物都是对象,但是他们都能找到一个共同点,人 和 动物,植物....所以 类 可以理解为他们的共同特征。 人:有手脚 能说话 站立行走 动物 :有毛发 四肢行走 这样就产生了类。 那么 请思考,为什么要有类呢
为什么要有类
一家啤酒瓶厂,每天产出啤酒瓶为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 = 18P1 = Person() #实例化了一个对象P1print P1.name #然后就可以通过P1来读取属性了print P1.age# name , age 是类的公有属性# 可以直接在类外通过对象名访问,私有属性,需在前面加2个下划线'__'即可。
上面说到私有属性,那么私有属性能否被访问呢 私有字段 class Person: __name = 'alex' #创建了私有字段 __age = 18P1 = Person() #实例化了一个对象P1print 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_priceobj = Goods()obj.price # 获取商品价格obj.price = 200 # 修改商品原价del obj.price # 删除商品原价