面向对象

Posted lqb666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

面向对象
封装
继承
多态

程序 = 数据 + 功能
模块可以存放 数据 和 功能
函数是存放 功能 的,不调用不执行。
列表,存储 数据 和 方法(函数名),

把 数据 和 功能 整合起来,分为一类的编程思想就叫面向对象编程

类和对象
类:class

先定义类,再调用类产生对象

定义:定义阶段就运行,产生类的名称空间
dict:查看名称空间

class Student: 驼峰体
... 数据属性和方法属性

调用类实例化对象的时候,运行,对对象进行初始化
必须返回None,不能返回别的值
def __init__(self,x,y,z):  
    self.x = x

egon = Student(x,y,z) 实例化对象
egon.x = 1
Student.x

产生空对象,调用__init__方法初始化对象,返回初始化的对象
属性或对象先从对象中找,然后再去类中找,去父类,,,
从自身开始查找,逐级往父级查找对应属性或方法,直到根对象Object.prototype,没有返回undefined

类中的公共属性:

直接改类中的属性的值,所有对象的相应的值都改了,
如果改的是对象中的值,那么相当于重新创建了自己的值,不影响类中的值,和其它实例化的值

def init(self,x,y,z):
Student.count += 1

bound method 绑定方法:绑定给谁就操作谁

绑定方法地址里存的是啥?

school_shanghai = School(‘上海校区‘,‘虹桥火车站‘)
print(School.add_class)
print(school_shanghai.add_class)

<function School.add_class at 0x0000000000D73400>
<bound method School.add_class of <main.School object at 0x0000000000D70978>>

底层就是绑定给对象的名称空间,最终还是指向原来类的名称空间中的方法,
相当于给这个对象做了一个标记,它在调用的时候就给它临时绑定一下
是指向类中的函数的,地址不同,因为绑定方法做了进一步的处理,与普通函数不同

内置方法

方法

class Student:
def choice():
pass
Student.choice() 可以
stu.choice() 不可以

def xxx(self):
    pass

Student.xxx(stu) 类调用自己的方法时,要注意对象参数

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器