面向对象基础

一 、面向对象编程思想(oop)

什么是面向对象编程

面向对象编程 ------ Object Oriented Programming ,简称OOP,是一种程序设计思想

它将对象作为程序的基本单元

将数据和处理数据的程序封装到对象中

以提高软件的重要性,灵活性和扩展性为首要目的

面向对象编程的优缺点:

优点 

1.大大提高了扩展性,当一个对象发了修改时,对其他对象没有任何影响,对象之间相互独立,耦合度变得更低

2.大大提高了程序的灵活性

3.重用性

缺点:

1.程序的复杂度提高了

2.无法准确预知结果

应用场景

对扩展性要求较高的程序,通常是直接面向用户的,比如:QQ,微信

面向过程编程思想

关注的核心是过程,过程是一步一步的执行步骤,就是首先做什么再做什么

优点:逻辑清晰,复杂问题简单化,流程化

缺点:扩展性差,可维护性差

使用场景:

对扩展性要求较低的程序,比如:系统内核,计算器,git

二、类与对象

对象是什么

对象是特征和技能的结合体,具备自己的特征和行为

对象的另一种理解方式:

变量的作用是存储数据,函数的作用是处理数据

对象是将数据与处理数据的函数绑定在一起

类是什么

类就是类型,类别,种类,是一系列对象中相似特征与技能的结合体

在生活中是一种抽象的概念,例如:人类,动物是不具体的

三、创建类和对象

定义类

以学生类Student为例子,在Python中,定义类通过class关键字

class Student:
    pass

class后面紧跟的就是类名,即Student,遵循python编码规范,类名通常是大写开头的单词,多个单词是使用驼峰命名法

创建对象也称之为实例化,定义好student类后,就可以根据Student类创建Student的实例,创建实例通过类名加上()实现:

stu1 = Student()
print (stu1)
#<__main__.Student object at 0x000001E2E15485F8>
变量名stu1指向一个Student类的实例,
0x000001E2E15485F8是实例的内存地址,
每个实例的地址都是不相同的
print(Student)
#<class '__main__.Student'>
Student本身则是一个类(class)

属性的写法:

属性可以写在类中,类中的属性,是所有对象公共的

也可以写在对象中,对象中的属性,是每个对象独特的(不一样)

如果类中和对象中存在同样的属性,先访问对象,如果没有在访问类

属性的增删查改

1.增加属性

对象变量名称.属性名称 = 属性值

2.删除属性

del 对象的变量名称.属性名称

3.修改属性

对象.属性 = 新的值

4.查看属性 

print(对象.__dict__)   访问的是对象的所有属性

print(对象.__class__)  访问对象的类信息

四、初始化方法init

class Student:
    def __init__(self,name):
        self.name = name

t1 = Student('jack')
print(t1.name) # <__main__.Student object at 0x000002447EDD8B70>
print(t1) #jack

小结:

init函数用于为对象属性设置初始值

在创建对象时会自动调用

自动传入对象本事

五、为对象定制行为

class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def say_hi(self):
        print("hello ! my name is %s"%self.name)

stu1 = Student('yzy',18)
stu1.say_hi()  

六、绑定类方法

默认情况下类中的方法都是对象绑定方法

其特殊支出在于:
当使用对象调用该函数是会自动传入对象本身,作为第一个参数

当使用类名来调用时,它就是一个普通函数,有几个参数就得传几个参数

类的绑定方法

类的绑定方法用@classmethod来装饰

特殊之处:不管用类还是对象调用,都会自动传入类本身,作为第一个参数

什么时候绑定给对象:当函数逻辑需要访问对象中的数据时

什么时候绑定给类:当函数逻辑需要访问类中的数据时

非绑定方法

@staticmethod

也称为静态方法,就是即不需访问类的数据,也不需要访问对象中的数据

不常用

class Student:
    school = "oldboy"
   
    def __init__(self,name):
        self.name = name

    @classmethod
    def show_school(cls):
        print(cls)

    @staticmethod
    def print_hello():
        print("hello world")


stu = Student("jack")

绑定到类的方法与绑定到对象的方法总结

异同点

相同

绑定对象调用时都有自动传参的效果

绑定到谁给谁就由谁来调用

不同

绑定到类的方法自动传入当前类

绑定到对象的方法自动传入当前对象

原文地址:https://www.cnblogs.com/KrisYzy/p/11239704.html