您的位置:首页 > 其它

面向对象_基本概念(1)

2017-07-07 19:21 246 查看
写在最前

  完成一个工作[或一个任务],会有不同的角色;而这个角色为了达成最终目的,会用到不同的方法和属性(空间)

  把这个角色需要使用的方法和属性集中在一起展示出来,就形成了我们所说的类

  任何一个人成为(类的实例化)这个角色,就都会拥有这个类(既定的方法和属性)。


示例说明(以老师为例):

老师 需要 备课,讲课,辅导学生

把这里的老师比做类,那么老师要教学生,就需要备课,讲课,辅导学生完成作业。备课,讲课,辅导学生就是老师的方法。

教科书就是一个属性,不同的老师可能还会有不同的教课器材,比如:物理老师有地球仪,化学老师还会有实验器材。教科书、地球仪、化学实验器材 这些就是属性

所有的老师都具备 备课,讲课,辅导学生 的能力,这就是老师这个类中的公共方法,所有的老师都有教科书,这个教科书就是公共属性

而物理老师的地球仪,化学老师的化学实验器材,这就是物理老师和化学老师各自独有的私有属性。

面向对象编程

1). 什么是面向对象编程?

使用类 + 对象 代替 函数 的形式

2). 什么是类,什么是对象,之间有什么关系

class aaa:
pass
dd = aaa()
aaa    //类
aaa()  //类对象
dd     //实例对象


类: 属性[变量] 和 函数[方法] 的集合

对象: 类的实例

  1). 实例化即调用

  2). 类名首字母大写【命名规范】

  3). 在类的继承中,py2 和 py3的区别:[横向]广度查找,[纵向]深度查找

  4). 面向对象,代码可改造性强

  5). 不同角色,用不同的视角

内置方法【部分】

类的描述信息

__doc__

当前操作的对象在哪个模块

__module__

当前类的所有父类(所有父类组成的元组)

__bases__

构造(方法)函数

__init__

析构方法

__del__( self )

类属性

注意:通常你需要在单独的文件中定义一个类

属性: 公有属性、私有属性

方法: 公有方法、私有方法

类的私有属性

class Fa:
def __init__(self):
self.__age = 123
print(Fa.__age)

d = Fa()  # 123
print(Fa.__age)  # AttributeError: type object 'Fa' has no attribute '__age'


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

self.__private_attrs

类的公有属性、静态属性

class Fa:
age = 123  # 静态属性
def __init__(self):
self.age = 333  # 公有属性
print(self.age)
print(Fa.age)

# age 查找顺序: self.age --> Fa.age
9ed3
>

公有属性: 在实例对象的内存区域

静态属性: 在类所在的内存区域

1). 在类代码区内,静态属性只能由类名访问

2). self 可以访问公有属性,也可以访问静态属性

3). 在公有属性和私有属性同名的情况下,self 访问顺序同 函数 内外的局部与全局变量访问方式:先函数内查找,函数内[公有属性(self)]没有再找全局[静态属性(类名)]

4). 公有属性 如果与 静态属性 同名。两个变量在不同的内存地址,不可混淆。

5). 如果两者在代码区内的任何地方被更改,后续代码都得到更改后的值。

class Fa:
age = 123

def __init__(self):
self.age = 333
print(self.age)  # 333
print(Fa.age)    # 123
Fa.age += 1
self.age -=1

def run(self):
print(self.age)  # 332
print(Fa.age)    # 124

d = Fa()
d.run()


类方法

在类的内部,使用 def 关键字可以为类定义一个方法

与一般函数定义不同,类方法必须包含参数 self ,且为第一个参数

但在调用时不必传入相应的参数,系统将默认接收为实例对象

类的私有方法

class Fa:
def __init__(self):
print('Fa -- init')

def run(self):
print('Fa -- run')

def show_check(self):
self.__check()

def __check(self):
print('Fa__check')

d = Fa()  # Fa -- init
d.ab()    # Fa -- run
d.show_check()  # Fa__check
d.__ab()  # AttributeError: 'Fa' object has no attribute '__ab'


两个 下划线 开头,声明该方法为 私有方法,不能在类外部调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: