面向对象初识

 1.面向过程 vs 函数式编程
面向过程:
s1 = 'asdfqweqmvas'
count = 0
for i in s1:
    count += 1
print(count)

lst = [i for i in range(100)]
count = 0
for i in lst:
    count += 1
print(count)
函数式编程
def func(num):
    count = 0
    for i in num:
        count += 1
    return count
print(func('asdfqweqmvas'))
print(func(i for i in range(100)))

 函数体编程相较与面向过程编程:

1.减少代码的重用性
2.增强代码的可读性

2.
函数式编程 vs 面向对象编程
类:就是具有相同属性和功能的一类事物
对象:就是类的具体体现
面向对象编程的优点第一个:是一类功能函数的集合,使你的代码更清晰化,合理化
第二个优点:面向对象,要拥有上帝视角看问题,类其实就是一个公共模板,对象就是从具体的模板实例化出来的
      对象去操作使用这个公共模板

3.类的结构:
class human():
    '''
    此类主要是构建人类
    '''
    mind = '有思想'    #第一部分 静态属性 (属性,静态变量,静态字段)
    body = '有四肢'
    def think(self):    #第二部分 动态属性  (方法,函数)
        print(666)

class 是类的关键字,定义一个类
human是这个类的类名
类的结构从大方向来说分为两部分:静态变量,动态方法

4.类名操作静态属性
查看类中所有的方法  __dict__
class human:
    mind = '思想'
    body = {'眼睛':'','':'','耳朵':''}
    def work(self):
        print('人会工作')
# print(human.__dict__)  #查看类中的所有,以字典的形式输出
print(human.__dict__['mind'])   #思想
通过__dict__方法,只能进行查询,不能进行增删改
一般不用于单独的属性查询

5.万能的点
class Computer:
    screen = '显示画面'
    processor = '处理数据'
    def memory(self):
        print('电脑')
print(Computer.screen)   #利用类名查询静态变量
Computer.screen = '动态画面'  #利用类名改变静态变量的值
print(Computer.screen)
del Computer.screen         #利用类名删除静态变量的值
print(Computer.__dict__)
Computer.mouse = '鼠标'         #利用类增加静态变量
print(Computer.__dict__)
类名对静态变量的操作总结:
查看类的全部时,用__dict__.
对单个属性进行操作时,用万能的点

6.类名操作动态方法:
前提:除了两个特殊方法:静态方法,类方法之外,不会用类名去操作一个类中的方法
class Computer:
    screen = '显示画面'
    processor = '处理数据'
    def memory(self):
        print('牛逼')
Computer.memory(111)    #将参数传给self
Computer.__dict__['memory'](111)#也可以用,但是不用
 
7.
什么是对象?
    对象是从类中出来的,只要是类名加上(),这就是实例化的过程,这样会实例化一个对象
class human:
    mind = '思想'
    def name(self):
        print("第一个")
        print(self)
    def __init__(self):
        print('第二个')
    def leg(self):
        print('第三个')
obj = human()       #只要是实例化出对象,就会执行__init__方法
print(obj)
#obj的地址跟self的地址一样
实例化一个对象总共发生了三件事:
1.内存中开辟了一个对象空间
2.自动执行类中的__init__方法,并对这个对象空间的内存地址传递给__init__的第一个位置参数self
3.在__init__方法中通过self给对象空间添加属性
class Human:
    mind = '有思想'
    language = '使用语言'
    def __init__(self,name,sex,age,hobby):
        # self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。
        self.n = name
        self.s = sex
        self.a = age
        self.h = hobby
obj = Human('barry','',18,'运动')  #类名+()为对象
print(obj.__dict__)     查看对象的空间属性
#{'n': 'barry', 's': '男', 'a': 18, 'h': '运动'}

8.对象操作对象的空间属性
对象操作对象的空间属性: __dict__
对象名+__dict__ #查询对象中的所有属性 对象.__dict__
对象操作对象中的单个属性.万能的点
class human:
    mind = '有思想'
    def __init__(self,name,age,sex):
        self.n = name
        self.a = age    #通过self 将属性封装给对象obj  方便利用对象进行调用
        self.s = sex
obj = human('牛逼',18,'')
obj.job = 'IT'      #
del obj.n           #
obj.s = ''         #改      
print(obj.s)        #
print(obj.__dict__)

 8 从对象中操作类的操作:

class human:
    mind = '有思想'
    def __init__(self,name,age,sex):
        self.n = name
        self.a = age
        self.s = sex
obj = human('牛逼',18,'')
print(obj.mind)# 对象查询类中的静态属性
class Human:
    mind = '有思想'
    language = '实用语言'
    def __init__(self,name,sex,age,hobby):
        self.n = name
        self.s = sex
        self.a = age
        self.h = hobby
    def work(self):
        print(self)
        print('人类会工作')
    def tools(self):
        print('人类会使用工具')
obj = Human('barry','',18,'运动')
obj.work()
obj.tools()

 对象查看类中的静态方法 ,只能查看

类中的方法一般都是通过对象执行的,

并且对象执行这些方法后都会将空间地址,
传给方法中的第一个参数self
self 就是类中方法(函数)的第一个参数,代表的就是这个对象
一个类可以实例化多个对象

原文地址:https://www.cnblogs.com/shicongcong0910/p/10309806.html