Python学习笔记十五:面向对象

1、面向对象编程

Python是一门面向对象程序语言,面向对象语言编码的过程叫作面向对象编程。

面向对象编程(OOP)是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含数据和操作数据的函数。

面向对象程序设计把计算机程序视为一组对象的集合,每个对象都可以接受其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

在Python中,所有数据类型都被视为对象,也可以自定义对象,自定义对象数据类型就是面向对象中的类的概念。

  • 类:用来描述具有相同属性和方法的对象的集合。类定义了集合中每个对象共有的属性和方法。对象是类的实例
  • 类变量(属性):类变量在整个实例化的对象中是公用的。类变量定义在类中,且在方法之外。类变量通常不作为实例变量使用。类变量也称作属性
  • 数据成员:类变量或实例变量用于处理类及其实例对象的相关数据
  • 方法重写:如果从父类继承的方法不能满足子类的需求,就可以对其进行改写,这个过程称为方法的覆盖,也称为方法的重写
  • 实例变量:定义在方法中的变量只作用于当前实例的类
  • 多态:对不同类的对象使用同样的操作
  • 封装:对外部世界隐藏对象的工作细节
  • 继承:即一个派生类继承基类的字段和方法。继承允许把一个派生类的对象作为一个基类对象对待,以普通类为基础建立专门的类对象
  • 实例化:创建一个类的实例、类的具体对象
  • 方法:类中定义的函数
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

和其他编程语言相比,Python在尽可能不增加新语法和语义的情况下加入了类机制。Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类、派生类可以覆盖基类中的任何方法、方法中可以调用基类中的同名方法。对象可以包含任意数量和类型的数据。

2、类的定义

类定义的语法格式如下:

class Class Name(object)
  <statement -1>
  .
  .
  .
  <statement -N>

由代码片段和类定义我们看到,Python中定义类使用class关键字,class后面紧接着类名,如实例中的MyClass,类名通常是大写开头的单词;紧接着是(object),表示该类是从那个类继承下来的。通常,如果没有合适的继承类,就使用object类,这是多有类最终都会继承的类。类包含属性和方法。

在类定义方法的形式核函数差不多,但不成为函数,而称为方法。方法的调用需要绑定到特定对象上,而函数不需要。

3、类的使用

类对象支持:属性引用、方法引用和实例化。

class MyClass(object)
       i = 123
       def f(eslf):
            return ‘hello world’
use_class = MyClass()
print(‘类属性:’ , use_class.i)
print(‘类方法:’ , use_class.f())


类属性:123
类方法:hello world

类对象创建后,类命名空间中所有的命名都是有效属性名。use_class = MyClass() ,这步叫做类的实例化,即创建一个类的实例。此处得到的use_class变量称为类的具体对象;use_calss.i 用于调用类的属性,即类变量;use_class.f() 用于调用类的方法。

1)类的属性

属性引用使用和Python中所有的属性引用一样的标准语法:obj.name。
属性引用的标准语法为:

扫描二维码关注公众号,回复: 746420 查看本文章
obj.name
obj代表类对象,name代表属性

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

2)类的方法

对于类方法定义的要求:在类中定义方法时,第一个参数必须是self。除第一个参数外,类的方法和普通函数没有什么区别,如可以用默认参数、可变参数、关键字参数和命名关键字参数等。

对于在类中调用方法的要求:要调用一个方法,在实例变量上直接调用即可。除了self不用传递,其他参数正常传入。

#!/usr/bin/python3 
#类定义 
class people: 
        #定义基本属性 
        name = '' 
        age = 0 
        #定义私有属性,私有属性在类外部无法直接进行访问 
        __weight = 0 
        #定义构造方法 
        def __init__(self,n,a,w): 
            self.name = n 
            self.age = a 
            self.__weight = w 
        def speak(self): 
            print("%s 说: 我 %d 岁。" %(self.name,self.age)) 

# 实例化类 
p = people('runoob',10,30) p.speak()
执行以上程序输出结果为:
runoob 说: 我 10 岁。

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods。

3)类的实例

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

class Test: def prt(self): print(self) print(self.\__class__) t = Test() t.prt()

以上实例执行结果为:

<\__main__.Test instance at 0x100771878>
\__main__.Test

从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。

self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:

class Test: def prt(runoob): print(runoob) print(runoob.\__class__) t = Test() t.prt()

以上实例执行结果为:

<\__main__.Test instance at 0x100771878>
\__main__.Test

4、类的构造方法

很多类都倾向于将对象创建为有初始状态的。因此类可能会定义一个名为\ init() 的特殊方法(构造方法),像下面这样:

def \__init__(self): self.data = []

类定义了\ init() 方法的话,类的实例化操作会自动调用 __init__() 方法。所以在下例中,可以这样创建一个新的实例:

x = MyClass()

当然, __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上。例如:

#!/usr/bin/python3 
class Complex: 
        def __init__(self, realpart, imagpart): 
            self.r = realpart 
            self.i = imagpart 
x = Complex(3.0, -4.5) 
print(x.r, x.i) 

# 输出结果:3.0 -4.5

5)修饰符

猜你喜欢

转载自blog.csdn.net/viatorsun/article/details/80285804
今日推荐