运维开发网

2018.12.4python笔记(2.7-2.8)

运维开发网 https://www.qedev.com 2020-03-11 14:51 出处:51CTO 作者:wuyinchen
2.7面向对象介绍面向过程和面向对象面向过程和面向对象编程-面向过程编程:函数式编程,C程序等-面向对象编程:C++,Java,Python等类和对象类和对象:是面向对象中的两个重要概念-类:是对事物的抽象,比如:人类、球类-对象:是类的一个实例,比如:足球、篮球实例说明:-球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球实体出来。为什么面向对象面向对象的主要思想是:-封装-继承-多态

2.7 面向对象介绍

面向过程和面向对象

面向过程和面向对象编程

  • 面向过程编程:函数式编程,C程序等
  • 面向对象编程:C++,Java,Python等

类和对象

类和对象:是面向对象中的两个重要概念

  • 类:是对事物的抽象,比如:人类、球类
  • 对象:是类的一个实例,比如:足球、篮球

    实例说明:

  • 球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球实体出来。

为什么面向对象

面向对象的主要思想是:

  • 封装
  • 继承
  • 多态

    这种思想方便解决较为复杂的项目,且维护起来较为容易。

Python类定义

类定义:

类把需要的变量和函数组合成一起,这种包含称为“封装”

class A(object):

类的结构:

class 类名: 类名每个单词的首字母大写

成员变量 – 属性

成员函数 – 方法

类的创建

class MyClass(object):

def fun(self):

print “I am function”

类的方法中至少有一个参数self

例子

#!/usr/bin/python

class People(object): 创建一个类

color = 'Yellow' 定义类的属性

def think(self): 定义一个类的方法,self必须要加,说明这是一个类自己的方法

self.color = 'black' 可以给类的属性重新赋值

print "I am thinking"

print "i am %s man" % self.color 重新调用变量

ren = People() 将类实例化然后赋值给ren

print ren.color 实例化后的对象调用类的属性color

ren.think() 实例化后的对象调用类的方法

[root@salt-master ~]# python 3.py

Yellow

I am a thinker

I am black man

类由属性和方法组成,类的属性是对数据的封装,类的方法是对类的行为的封装。

  • 成员变量 -- 静态属性
  • 成员函数 -- 动态方法

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

    句柄用于区分不同的对象

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

    obj = MyClass() //创建类的一个实例(对象)

    通过对象来调用方法和属性

2.8 类的属性

类的属性按使用范围分为公有属性和私有属性,类的属性范围取决于属性的名称。

  • 公有属性:在类中和类外都能调用的属性。
    • 私有属性:不能在类外及被类以外的函数调用。

      定义方式:以”__”双下划线开始的成员变量就是私有属性

      可以通过instance._classname__attribute方式访问。

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

      #!/usr/bin/python

class People(object):

color = 'Yellow'

age = 30 这里定义私有属性 双下划线注意,这个属性只能在类的内部使用

def think(self):

print "I am a thinker"

self.color='black'

print "I am %s man" % self.color

print self.age 访问私有属性

ren = People()

print ren.color

ren.think()

#print ren.age 报错,在外部不能调用类的私有属性

如果要访问类的私有属性,可以把私有属性放在类的方法中,然后调用类的方法

第二种访问类的私有属性的方法 实例._类名__属性名 print ren._Peopleage 这种方法只建议在测试的时候使用,不建议在程序中使用

print ren.dict 直接访问类的内置属性 返回的将是 {'color': 'black'} 这个字典

也可以通过People.color 直接访问类的属性 print People.color

对象可以去修改类的属性 ren.color='white' 修改的是对象的属性,不会修改类原来的属性

类调用内置属性 People.dict

2.9 类的方法

方法的定义和函数一样,但是需要self作为第一个参数。

类方法为:

  • 公有方法
  • 私有方法
  • 类方法
  • 静态方法

公有方法:在类中和类外都能调用的方法。

def think(self):

print "I am a thinker"

self.color='black'

print "I am %s man" % self.color

print self.__age

上面就是一个公有方法

私有方法:不能被类的外部调用,在方法前面加上”__”双下划线就是私有方法。

#!/usr/bin/python

class People(object):

color = 'Yellow'

age = 30

def think(self):

print "I am a thinker"

self.color='black'

print "I am %s man" % self.color

print self.age

def test(self):

self.talk() 在内部来调用talk()方法

def __talk(self):        定义私有方法
      print "I am talking with Tom"

jack = People()

jack.test()

jack.__talk() 报错 不能通过对象直接访问类的私有方法

self参数

用于区分函数和类的方法(必须有一个self),self参数表示执行对象本身。

类的方法

类方法:被classmethod()函数处理过的函数,能被类所调用,也能被对象所调用(是继承的关系)

def test(self):

print 'Testing....'

cm = classmethod(test) test方法被classmethod处理 然后赋给cm变量

People.cm() 类调用cm函数 就是调用了test方法 这种调用就是动态的 因为加载到内存里的是某个方法,通过类来调用方法是非常节省内存的

静态方法:相当于”全局函数”,可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义,静态方法没有”self”参数。

def test(): 静态方法没有self参数

print 'this is func'

sm = staticmethod(test) 使用staticmethod函数处理一下

People.sm() 类调用静态方法

静态方法调用的时候会把类中的所有方法都加载到内存中 静态比动态的速度要快一点

静态方法中使用 People.color来直接访问类的属性

装饰器: 可以使用装饰器来代替 classmethod() 和 staticmethod()函数

  • @classmethod
  • @staticmethod

    @classmethod 加载装饰器,它只对它下一行的函数生效,说明他是一个类方法

    def test(self):

    print 'this is func'

0

精彩评论

暂无评论...
验证码 换一张
取 消