您的位置:首页 > 编程语言 > Python开发

2018.12.4python笔记(2.7-2.8)

2018-12-05 08:52 218 查看

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._People
age 这种方法只建议在测试的时候使用,不建议在程序中使用

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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 笔记