首页 > 技术文章 > 07-Python面对对象初级

clearlie 2020-06-23 15:32 原文

、简介

面对过程编程: 根据操作数据的函数或语句块来设计程序。

面对对象编程:把一些函数,数据,方法和功能结合起来,用“对象”包裹组织程序的一种方法。

类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类

的实例。

二、类的定义

Class 类名:

类体

在这个类的定义中,需要注意:

1. 类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。

2. 类体中我们可以定义属性和方法。

3. 属性用来描述数据,方法(即函数)用来描述这些数据相关的操作。

下面我们简单看一个类的定义

>>>class Student:
…    def __init__(self, name, age):   #构造方法第一个参数必须为self
…       self.name = name         #实例属性
…       self.age = age

…    def know(self):              #实例方法
…       print('my name is {},and I\'m {}'.format(self.name,self.age) )

>>>Student('wanger', 18).know()

my name is wanger,and I'm 18

 

三、__init__方法

__init__ 方法在类的一个对象被建立时,该方法在类实例化时会自动调用

__init__方法要注意:

1. 名称固定,必须为__init__(),起始和结束必须是双下划线。

2. 第一个参数固定,必须存在一个参数,一般为:selfself指刚创建好的实例对象。

3. 构造函数通常用来初始化实例对象的实例属性。

4.通过类名调用构造函数,类名调用即开始自动调用构造函数,一般为:类名(参数列表

  • 实例属性和实例方法:

实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用如下:

1. 实例属性一般在__init__()方法中通过如下代码定义:

self.实例属性名= 初始值

2. 在本类的其他实例方法中,也是通过self 进行访问:

self.实例属性名

3. 创建实例对象后,通过实例对象访问:

a = 类名()   #创建对象,调用__init__()初始化属性

a.实例属性名=   #可以给已有属性赋值,也可以新加属性

实例方法是从属于实例对象的方法。实例方法的定义格式如下:

def 方法名(self , 形参列表)

函数体

方法的调用格式如下:

对象.方法名(实参列表)

  • 类的方法

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。

#类定义

class People:

    # 定义基本属性

    n = 'Bob'

    a = 0

    # 定义私有属性,私有属性在类外部无法直接进行访问

    __w = 0

 

    # 定义构造方法

    def __init__(self, n, a, w):

        self.a = a

        self.__w = w

 

    def know(self):

        print("%s say: I’m  %d years old。" % (self.n, self.a))

 


# 实例化类

a = People('',18,50)

a.know()

输出结果为:Bob say: Im  18 years old。(没有给a赋值则默认为基本属性里的值)

四、私有属性和私有方法

  • 类的私有属性

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

  • 类的私有方法

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

 

class Student:
    # 定义基本属性
    n = 'Bob'
    a = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __w = 0

    # 定义构造方法
    def __init__(self, n, a, w):
        self.n = n
        self.a = a
        self.__w = w

    def know(self):
        #类内部可以直接调用
        print('my weight is: ',Student.__w )
        print("%s say: I’m  %d years old。" % (self.n, self.a))

    #定义私有方法
    def __myself(self):
        print('my weight is 55')


my = Student('王二', 18 , 55)
print(my.n,my.a)  #外部可以调用类属性
my.know()  #调用定义方法
print(my._Student__w) #外部调用私有类属性的方法
my._Student__myself() #外部调用私有实例方法

 

  • 类的专有方法

__init__ : 构造函数,在生成对象时调用

__del__ : 析构函数,释放对象时使用

__repr__ : 打印,转换

__setitem__ : 按照索引赋值

__getitem__: 按照索引获取值

__len__: 获得长度

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

  • 属性和方法命名总结

_xxx:保护成员,不能用“from module import * ”导入,只有类对象和子类对象能访

问这些成员。

__xxx__:系统定义的特殊成员

__xxx: 类中的私有成员,只有类对象自己能访问,子类对象也不能访问。(在类外

部可以通过“对象名. _类名__xxx”这种特殊方式访问。)

推荐阅读