什么是面向对象
面向过程:简单的,可用线性思维去解决
面向对象:复杂的,用简单线性思维无法解决
类:相似群体的统称,便于快速理解和分辨事物。在python中就是数据类型,int float str tuple dict list等
对象:具体的个例就是对象,在python中一切皆对象。
定义类
类的名称由一个或者多个单词组成,每个首字母大写,其余小写
直接写在类里边的变量成为类属性
在类里定义的方法叫实例方法:
def info(self):
print('')
类方法:
@classmethod
def cm(cls):
print('')
静态方法:
@staticmethod
def sm():
print('')
在类外定义的称为为函数
创建对象
对象名=类名(实例属性1,属性2)
对象名.方法名()与类名.方法名(类的对象名)作用相同。
类属性、类方法、静态方法的使用
类属性:类中方法外的变量称为类属性,被该类的所有对象共享
#print(类名.类属性)或者print(对象名.类属性)
类方法:使用类名直接访问的方法#类名.类方法
静态方法:使用类名直接访问的方法#类名.类方法
定义学生的类
class Student: # 要求首字母大写
native_pace = '吉林' # 写在类里的变量,称为类属性
def __init__(self, name, age):
self.name = name # 实例属性,将局部变量name赋值给实体属性
self.age = age
# 实例方法
def eat(self):
print('学生在吃饭...')
# 静态方法
@staticmethod
def methmod():
print('我使用了staticmethmod修饰,是静态方法')
#类方法
@classmethod
def cm(cls):
print('使用了classmethod修饰,是类方法')
print('------------------')
stu1=Student('张三',20)
stu2=Student('李四',30)
print(stu1.native_pace)
print(stu2.native_pace)
Student.native_pace='天津'
print(stu1.native_pace)
print(stu2.native_pace)
print('--类方法的使用方式--------')
Student.cm()
print('--静态方法的使用方式--------')
Student.methmod()
动态绑定属性和方法
对象名.属性名=值 #为某对象动态绑定属性
def 方法名():
对象名.方法名=方法名#动态绑定方法
'''
python 是动态语言,在创建对象之后,可以动态地绑定实现和方法,
一个student类可以创建N多个实例对象,每个实例对象的属性值可以形态也可以不同
'''
class Student:
#类对象
def __init__(self,name,age):
self.name=name
self.age=age
#实例方法
def eat(self):
print(self.name+'在吃饭')
#类的实例对象
stu1=Student('zhangsan',18)
stu2=Student('lili',20)
print(id(stu1))
print(id(stu2))
print('-----为stu2绑定性别动态属性-------')
stu2.gender='女'
print(stu1.name,stu1.age,stu2.name,stu2.age,stu2.gender)
print('-----为stu1绑定show动态方法-------')
def show():
print('定义在类之外的,称为函数')
stu1.show=show #当绑定在对象上之后就称为方法
stu1.show()
stu2.show()会报错,应为stu2没有绑定show方法
总结
‘’’
编程思想:面向过程 面向对象
类对象class:类属性、类方法、静态方法是使用类名取吊用的,实例方法是使用对象打点调用的
类属性:定义类里的变量
类方法 :使用@classmethod修饰的,小括号默认代cls参数
实例方法:def ***(默认代self–>也可以自己去列的名字)
静态方法:使用@staticmethod进行修饰,没有默认参数
实例对象:类名()括号里可以传参数 创建实例对象C
动态绑定属性 动态绑定方法(只对当前对象起作用)
‘’’