面向对象编程和类

面向对象编程

面向过程编程与面向对象编程的区别:
面向过程编程使复杂的问题简单化,流水线操作
优点:复杂的问题简单化
能准确预知结果
缺点:可拓展性差,灵活性差,重用性差
面向对象编程,让对象去解决问题
优点:可拓展性好
灵活性好
重用性好
缺点:程序复杂程度提高
无法准确预知结果

类和对象

类和对象:
    类:就是一系列具有相同特征,行为相同的对象集合体
    对象:具体存在的某个事物,具有自己独特的特征和行为


类和对象的关系:
    类包含一系列对象
    对象属于类
    在程序中先有类再有对象


创建类的语法
class 类名: # class为关键字
    # 类中的内容 描述类的功能和属性
    # 描述属性用变量
    # 描述功能用函数


创建对象的语法
class Person:
    pass

# 创建对象
p = Person()


描述属性的写法:

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

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


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


练习: 描述一个老师类 需要包含 一个公共属性和 一个独特的属性 

class Teacher:
    school = "oldboy"
    
t1 = Teacher()
t1.name = "jack"
t1.age = 28

属性的增删改查

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

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

修改 
对象.属性 = 新的值 

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

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

init方法

叫做初始化方法,本质上就是一个函数 

特点1: 当实例化 对象时,会自动执行init方法

特点2:会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改

功能:用户给对象赋初始值  

class Dog:
    def __init__(self,kind,color,age):
        self.kind = kind
        self.color = color
        self.age = age

d1 = Dog("二哈","黑白",1)
d1 = Dog("泰迪","棕色",2)


注意:该函数不能有任何返回值/.... 只能是None  规定如此..

绑定方法

## 对象的绑定方法

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

其特殊之处在于,

当使用对象调用该函数时会自动传入对象本身,作为第一个参数  

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

class Student:
    
    def __init__(self,name):
        self.name = name
     
    def say_hi(self):
        print("hello my name is %s" % self.name)



## 类绑定方法

类绑定方法用@classmethod来装饰 

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



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

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


# 非绑定方法

或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据 

语法:@staticmethod 

不常用
原文地址:https://www.cnblogs.com/asdaa/p/11240753.html