python学习笔记12-python面向对象
python一切皆对象
一、基本概念
1、面向对象和面向过程
面向对象编程:C++,Java,Python
面向过程编程:函数式编程,C程序等
2、类和对象
类:是对事物的抽象,比如:人类,球类
对象:是类的一个实例,比如:足球,篮球,对象就是对类的实例化
属性:五官,眼,鼻子,理解为一个变量,静态属性
方法:对人来说,吃穿住行,理解为一个函数,动态方法
实例说明:球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球实体出来
3、为什么要使用面向对象?
面向对象的主要思想是:
封装
继承
多态
这种思想方便解决较为复杂的项目,且维护起来比较容易
4、Python类定义
(1)类定义(封装)
类把需要的变量和函数组成在一起,这种包含称为“封装”
class A(object):
A是类名:数字,字母和下划线组成,不能是数字开头,首字母大写
变量,小写,两个单词,中间下划线
函数,如果是两个单词,首字母小写=,第二个字符以后首字母大写
(2)类的结构:
class 类名
成员变量-属性
成员函数-方法
调用对象的方法,其实就是调用对象的一个函数
(3)类的创建
class MyClass(object):
def fun(self):
print "I am function"
类的方法中至少有一个参数self
(4)类的创建实例
[root@133 class]# vim class1.py #!/usr/bin/python class People(object): color = ‘yello‘ #定义静态属性 def think(self): #定义动态方法,必须要有一个self self.color = ‘black‘ #函数内也可以调用类的属性,还可以重新赋值,但是需要使用self print "I am a %s" % self.color print "I am a thinker" people = People() #类的实例化,就是把类赋值给一个变量,这个变量就是一个对象,通过这个对象——人,去调用他的属性和方法 print people.color #color是属性,不用括号() people.think() #think是方法,需要带括号() [root@133 class]# python class1.py yello I am a black I am a thinker
(5)对象的创建
创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性,对象句柄,属性和方法
句柄用于区分不同的对象 people
对象的属性color和方法think与类中的成员变量和长远函数对应
obj = MyClass() //创建类的一个实例(对象),通过对象来调用方法和属性
类的属性,按照使用范围分为公有属性和私有属性,
公有属性,类中、类外都能被调用
私有属性,不能再类外以及被类外其他函数调用,以__双下划线开始的成员变量就是私有属性
可以通过instance._classname_attribute方式访问。前面是单下划线,后边是双下划线。
内置属性:由系统在定义类的时候默认添加的,由前后双下划线构成,__dict__ , __module__。
[root@133 class]# vim class1.py #!/usr/bin/python class People(object): color = ‘yello‘ __age = 30 #添加了私有属性__age = 30 def think(self): self.color = ‘black‘ print "I am a %s" % self.color print "I am a thinker" print self.__age #私有属性__age = 30类内部可以调用 people = People() print people.color people.think() people.__age #私有属性__age = 30类外部不能使用 [root@133 class]# python class1.py yello I am a black I am a thinker 30 Traceback (most recent call last): File "class1.py", line 15, in <module> people.__age AttributeError: ‘People‘ object has no attribute ‘__age‘#报错,对象people没有属性__age [root@133 class]# vim class1.py #!/usr/bin/python class People(object): color = ‘yello‘ __age = 30 def think(self): self.color = ‘black‘ print "I am a %s" % self.color print "I am a thinker" print self.__age people = People() print people.color people.think() print people._People__age #在类外调用类的私有属性,但是不建议这样做,类People前面是单下划线,后边是双下划线 [root@133 class]# vim class1.py #!/usr/bin/python class People(object): color = ‘yello‘ #内置属性 __age = 30 def think(self): self.color = ‘black‘ print "I am a %s" % self.color print "I am a thinker" print self.__age people = People() print people.color people.think() print people.__dict__ #通过对象调用内置属性,区别类调用内置属性, [root@133 class]# python class1.py yello I am a black I am a thinker 30 {‘color‘: ‘black‘} #生成字典,内置属性 [root@133 class]# vim class1.py #!/usr/bin/python #coding:utf-8 #支持中文,或者coding:utf8 或者encoding:utf-8 或者 # -*- encoding:utf-8 -*- class People(object): color = ‘yello‘ __age = 30 def think(self): self.color = ‘black‘ print "I am a %s" % self.color print "I am a thinker" print self.__age people = People() people.color = ‘白种人‘ print people.color people.think() print people.__dict__ print ‘#‘ *30 print People.color [root@133 class]# python class1.py 白种人 I am a black I am a thinker 30 {‘color‘: ‘black‘} ############################## yello [root@133 class]# vim class1.py #!/usr/bin/python #coding:utf-8 class People(object): color = ‘yello‘ __age = 30 def think(self): self.color = ‘black‘ print "I am a %s" % self.color print "I am a thinker" print self.__age people = People() people.color = ‘白种人‘ print people.color people.think() print people.__dict__ print ‘#‘ *30 print People.color print People.__dict__ #通过类来调用内置属性,会把系统内置属性打印出来,非常之多 [root@133 class]# python class1.py 白种人 I am a black I am a thinker 30 {‘color‘: ‘black‘} ############################## yello {‘__module__‘: ‘__main__‘, ‘color‘: ‘yello‘, ‘__doc__‘: None, ‘__dict__‘: <attribute ‘__dict__‘ of ‘People‘ objects>, ‘_People__age‘: 30, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘People‘ objects>, ‘think‘: <function think at 0x7f7c3b5c6758>}
本文出自 “梅花香自苦寒来!” 博客,请务必保留此出处http://daixuan.blog.51cto.com/5426657/1850762
原文地址:http://daixuan.blog.51cto.com/5426657/1850762