类与面向对象
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。
它将对象作为程序的基本单元
将数据和处理数据的程序封装到对象中
以提高软件的重用性、灵活性和扩展性为首要目的
什么是类
主观抽象化出来的一系列事物拥有共同的特征与行为的集合,如 类型 类别 举例 :笔记本电脑 大象
什么是对象
对象是特征与技能的结合体 比如 我的电脑, 我的狗 既 单指一个个体
类有什么用
使用类来标识不同对象之间的差异 以及 构建复用的主体 ,即是面向对象oop的第一步.
对象有什么用
将数据与函数绑定在一起,当需要的时候直接调用对象而不是重复的写 一系列函数 来处理问题
怎么使用类 与对象
类名称 见名知意 名称采用大驼峰
单词首字母大写 小驼峰是首字母小写
对象名称 类名加上() 与变量取名采用统一标准
创建类与对象的语法:
class Student:
print('I am a student')
pass
my_classmate=Student() 生成了一个名叫my_classmate的对象,它属于Student这个类
属性可以写在类中(类的属性,是所有对象公共的)
也可以写在对象中(对象中的数,是每个对象独特的(不一样的))
如果类中和对象中存在同样的属性,先访问对象,如果没有访问类,如果还没有则访问父类,直到Object,都没有则抛出异常
也可以通过. 点语法在创建对象后为对象增加数据属性.
通过这个方法添加的属性将属于该对象所独有 ,不会影响到其他的对象
对象.__dict__是访问类的所有属性 返回值是一个列表
.__init__方法 也称初始化方法
是初始化对象时 ,该对象所在类所赋予的初始值.举例来说 就像新生儿出生时的带着啼哭.
__init__也可以理解为函数 ,只不过会在生成对象时自动调用执行 且__init__函数要求第一个参数必须
是self既将类作为参数传递过来,虽然self的名称可以改,但并不建议改后会不利于阅读,
总结 :__init__ 一般用来设定对象的初始值
创建对象时自动调用
自动默认传入对象本身
绑定方法与非绑定方法:
绑定方法的处理方式:
1.调用方法时传入对象,对象中包含了需要的所有数据,减少重复代码
2.后期数据变化时,修改类对象中的属性,方法中增加相应的处理代码,而方法参数不会发生变化,提高了扩展性
3.方法与对象进行绑定,没有对象则无法使用方法,并且在创建对象的初始化方法中,已经确定了各个属性数据时正确的,如此一来避免了传入使用错误数据执行函数造成的问题
简单的说,就是将数据与处理数据的函数绑定在一起,没有数据则根本不需要处理数据的函数,反过来要执行处理数据的函数则必须提供要被处理的数据
二:非绑定方法:用staticmethod装饰器装饰的方法
特点:不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通函数
不过由于作用域在类中所以需要使用类或对象类调用
class Student:
school = "Tsinghua"
def say_hello(self):# 绑定到对象的方法
print(self)
print("hello i am a student my name is %s" % self.name)
def __init__ (self,name): #绑定到对象的方法
self.name = name
@classmethod # 绑定到类的方法
def school_info(cls):
print(cls)
print("the student from %s" % cls.school)
stu1 = Student("Jack")
print(stu1)
#输出 <__main__.Student object at 0x1063112e8>
#1.调用对象绑定方法
stu1.say_hello()
#输出 <__main__.Student object at 0x1063112e8>
#输出 hello i am a student my name is Jack
#查看对象绑定方法
print(stu1.say_hello)
<bound method Student.say_hello of <__main__.Student object at 0x10552b2e8>>
#含义 这个绑定方法是Student类中的say_hello函数,绑定到地址为0x10552b2e8的Student对象
#绑定方法本质上也是函数 只要能找到它就能调用它所以你可以这样来调用它
Student.say_hello(stu1)
<__main__.Student object at 0x103818390>
hello i am a student my name is Jack
print(Student)
<class '__main__.Student'>
#2.调用类绑定方法
Student.school_info()
<class '__main__.Student'>
the student from Tsinghua
#查看类绑定方法
print(Student.school_info)
<bound method Student.school_info of <class '__main__.Student'>>
#含义 这个绑定方法是Student类中的school_info函数,绑定到Student这个类
绑定到类的方法与绑定到对象的方法总结
异同点:
相同:绑定对象调用时都有自动传参的效果绑定到谁给谁就由谁来调用
不同:绑定到类的方法自动传入当前类绑定到对象的方法自动传入当前对象
另外:绑定方法中的self 和 cls参数名 是可以随意修改的,但是self和cls是约定俗成的写法,为了提高可读性不建议修改