面向对象1



面向对象概念

面向对象是利用类和对象来创建各种模型对真实世界进行描述,也能使程序变得简单。

class 类

一个类即对一类拥有相同属性的对象的抽象。其中类定义了这些对象都具备非属性以及方法。

object 对象

一个对象即是一个类的实例化后的实例,一个类必须经过实例化后才能在程序中调用,一个类可以有多个属性,每个对象也可以有不同的属性

encapsulation 封装

在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个容器,里面包含着类的属性以及方法。

防止数据被随意修改

使外部程序不需要关注对象内部结构,只需要通过对象对外提供的接口进行直接访问即可

inheritance 继承

一个类可以派生出子类,在这个类里定义的属性、方法自动被子类继承

通过父类->子类的方式以最小编码实现不同角色的不同点与共同点

polymorphism 多态

一个基类中派生出不同的子类,且每个子类在继承同样方法名的同时对父类的方法做了不同的实现,就是同一种事物表现出的多种状态。

 

定义类和对象

类的定义

 

   1 class person(object): 

2 #person类名,object是固定格式

3     def __init__(self,name): 

4 #类的构造函数,对象的参数都由此处传入。self表示是对象自身

5         self.name = name

6

7     def hello(self):  

8 #由于self等于对象自身,而构造函数已经将所有参数传给self了。所以类的方法可以直接调用类的属性。不会出现构造函数的局部不按量不能被其它方法访问

9         print("hello world,i'm %s"%self.name)

10

11 obj1 = person('zsq') #类的实例,即对象

12 obj1.hello() #对象调用方法

 

 

类的私有属性

对象的属性保存在对象内,对象的方法保存在类里面。类似于下面介绍的类的公有属性

 

   1 __author__ = 'zhang'

2

3 class person(object):

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

5         self.__heart = 'normal' #私有属性,对象不可调用。 类的方法可以进行调用,进行操作即外部不能调用,内部可以调用

6     def hello(self):

7         print("hello world,i'm %s"%self.name)

8

9     def get_heart(self): #访问私有属性的方法,让外部能访问但不能修改

10         return self.__heart

11

12 obj1 = person('zsq')

13 obj1.hello()

14 print(obj1.get_heart())#通过类的方法访问私有属性

15 print(obj1._person__heart)  #强制访问私有属性

 

 

类的公有属性

对象的公有属性默认是引用类里面的,当通过对象操作公有属性其实是在对象本地新建一个与公有属性同名的变量而已,与原来的公有属性没有任何关系。只不过访问时候先在本地寻找对应的变量名,找不到再去类中寻找而已。  删除对象自己的公有属性其公有属性会恢复到类里面公有属性的值。

 

   1 class person(object):

2     nationality = "CHINA"

3     def __init__(self,name):

4         self.name = name

5

6 obj1 = person('zsq')

7 obj2 = person('zsq1')

8 print(obj1.nationality)

9 print(obj2.nationality)

10 print('-------------')

11 person.nationality = "CN"

12 print(obj1.nationality)

13 print(obj2.nationality)

14 obj1.nationality = "USA"

15 print('-------------')

16 print(obj1.nationality)

17 print(obj2.nationality)

18 print('-------------')

19 del obj1.nationality

20 print(obj1.nationality)

21 print(obj2.nationality)

 

将类方法修改为私有方法

 

   1 class person(object):

2     nationality = "CHINA"

3     def __init__(self,name):

4         self.name = name

5     def get_name(self):

6         print("get name is %s"%self.name)

7

8 obj1 = person('zsq')

9 obj2 = person('zsq1')

10

11 def get_name2(self):

12     print("this is private fun get name %s"%self.name)

13 obj2.get_name = get_name2

14 obj1.get_name()

15 obj2.get_name(obj2)

 

 

猜你喜欢

转载自173806613.iteye.com/blog/2406708