编程思想
面向过程 | 面向对象 | |
区别 | 事物比较简单,可以用线性思维去解决 | 事务比较复杂,使用简单的线性思维无法解决 |
共同点 | 面向过程和面向对象都是解决实际问题的一种思维方式 二者相辅相成,并不是对立的 解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统:具体到微观操作,仍然使用面向过程方式来处理 |
类与对象
类
类是多个类似事物组成的群体的统称,能够帮助我们快速理解和判断事务的性质。
数据类型
- 不同的数据类型属于不同的类
- 使用内置函数查看数据类型
对象
100、90、666都是int类之下包含的 相似的不同个例,这个个例专业术语称为实例或对象。
Python中一切皆对象
类的创建
创建类的语法
class Student: #Student为类的名称(类名)由一个或多个单词组成,每个单词首字母 大写,其余小写
pass
类的组成
- 初始化方法:每当进行类的实例化时,初始化方法会自动被执行
- 类属性:直接写在类里的变量,称为类属性
- 实例方法:在类之外定义的称为函数,在类之内定义的称为方法
- 静态方法:使用staticmethod修饰的,称为静态方法(规定不允许写self)
- 类方法:使用classmethod修饰,称为类方法
class Student: #Student为类的名称(类名)由一个或多个单词组成,每个单词首字母 大写,其余小写
native_pace='河南' #直接写在类里的变量,称为类属性
def __init__(self,name,age):
self.name=name # self.name称为实例属性,进行了一个赋值的操作,将局部变量的name的值赋给实例属性
self.age=age
#实例方法(在类之外定义的称为函数,在类之内定义的称为方法)
def a(self):
print('今天星期一')
#静态方法
@staticmethod
def method():
print('我使用了staticmethod进行修饰,所以我是静态方法')
#类方法
@classmethod
def cm(cls):
print('我使用了classmethod进行修饰,所以我是类方法')
对象的创建
对象的创建又称为类的实例化
语法:
实例名=类名()
意义:有了实例,就可以调用类中的内容
class Student: #Student为类的名称(类名)由一个或多个单词组成,每个单词首字母 大写,其余小写
native_pace='河南' #直接写在类里的变量,称为类属性
def __init__(self,name,age):
self.name=name # self.name称为实例属性,进行了一个赋值的操作,将局部变量的name的值赋给实例属性
self.age=age
#实例方法(在类之外定义的称为函数,在类之内定义的称为方法)
def a(self):
print('今天星期一')
#静态方法
@staticmethod
def method():
print('我使用了staticmethod进行修饰,所以我是静态方法')
#类方法
@classmethod
def cm(cls):
print('我使用了classmethod进行修饰,所以我是类方法')
#创建student类的对象
stu1=Student('张三',20)
print(id(stu1)) # 1783010897456 实例对象(stu1是Student这个类的对象的名称)
print(type(stu1)) # <class '__main__.Student'>
print(stu1) # <__main__.Student object at 0x0000019F23BB2E30> 输出stu1的值为十六进制的stu1的ID
print(id(Student)) #类对象(Student是类的名称)
print(type(Student))
print(Student)
#调用student类的对象
stu1.a() #(对象名).(方法名)
Student.a(stu1) #(类名).(方法名(类的对象))-->实际上就是方法定义处的self
#28行于27行代码功能相同,都是调用Student中的a方法
print(stu1.age)
print(stu1.name)
类属性_类方法_静态方法的使用
- 类属性:类中方法外的变量称为类属性,被该类的所有对象所共享
- 类方法:使用@classmethod修饰的方法,使用类名直接访问的方法
- 静态方法:使用@staticmethod修饰的主法,使用类名直接访问的方法
class Student: #Student为类的名称(类名)由一个或多个单词组成,每个单词首字母 大写,其余小写
native_pace='河南' #直接写在类里的变量,称为类属性
def __init__(self,name,age): #初始化方法 init
self.name=name # self.name称为实例属性,进行了一个赋值的操作,将局部变量的name的值赋给实例属性
self.age=age
#实例方法(在类之外定义的称为函数,在类之内定义的称为方法)
def a(self):
print('今天星期一')
#静态方法
@staticmethod
def method():
print('我使用了staticmethod进行修饰,所以我是静态方法')
#类方法
@classmethod
def cm(cls):
print('我使用了classmethod进行修饰,所以我是类方法')
#类属性的使用方式
print(Student.native_pace)
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)
#类方法的使用方式
Student.cm()
#调用静态方法
Student.method()
动态绑定属性和方法
Python是动态语言,在创建对象后,可以动态地绑定属性和方法
一个student类可以创建n多个student类的实例对象,每个实例对象的属性值不同
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def eat(self):
print(self.name+'在吃饭')
stu1=Student('张三',20)
stu2=Student('李四',30)
print(id(stu1))
print(id(stu2))
#为stu2动态绑定属性
stu1.gender='女'
print(stu1.name,stu1.age,stu1.gender)
print(stu2.name,stu2.age)
stu1.eat()
stu2.eat()
#为stu2动态绑定方法
def show():
print('定义在类之外的,称为函数')
stu1.show=show
stu1.show() #任何一个对象想要输出原有结果,都必须绑定
#stu2.show()因为stu2没有绑定show方法,所以程序运行报错
总结
- 类属性类方法静态方法都是使用类名去使用
- 实例方法除了使用对象名去使用,也可以使用类名调用,将对象传入