python学习笔记12-python面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习笔记12-python面向对象相关的知识,希望对你有一定的参考价值。

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)类的创建实例

[[email protected] 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是方法,需要带括号()

[[email protected] class]# python class1.py 
yello
I am a black
I am a thinker


(5)对象的创建

创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性,对象句柄,属性和方法

句柄用于区分不同的对象 people

对象的属性color和方法think与类中的成员变量和长远函数对应

obj = MyClass() //创建类的一个实例(对象),通过对象来调用方法和属性


类的属性,按照使用范围分为公有属性和私有属性,

公有属性,类中、类外都能被调用

私有属性,不能再类外以及被类外其他函数调用,以__双下划线开始的成员变量就是私有属性

可以通过instance._classname_attribute方式访问。前面是单下划线,后边是双下划线。


内置属性:由系统在定义类的时候默认添加的,由前后双下划线构成,__dict__ , __module__。

[[email protected] 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类外部不能使用

[[email protected] 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


[[email protected] 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前面是单下划线,后边是双下划线

[[email protected] 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__  #通过对象调用内置属性,区别类调用内置属性,
[[email protected] class]# python class1.py 
yello
I am a black
I am a thinker
30
{‘color‘: ‘black‘}  #生成字典,内置属性




[[email protected] 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


[[email protected] class]# python class1.py 
白种人   
I am a black
I am a thinker
30
{‘color‘: ‘black‘}
##############################
yello



[[email protected] 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__  #通过类来调用内置属性,会把系统内置属性打印出来,非常之多

[[email protected] 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

以上是关于python学习笔记12-python面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Python 学习笔记 - 面向对象(基础)

python-学习笔记1-面向对象编程

python学习笔记-面向对象进阶&异常处理

python学习笔记-面向对象进阶&异常处理

Python学习笔记-面向对象进阶封装多态继承

Python学习笔记之 面向对象