Python基础(类与对象)
一、编程的两大思想
面向过程和面向对象
面向过程 | 面向对象 | |
---|---|---|
区别 | 事物比较简单,可以用线性的思维去解决 | 事物比较复杂,使用简单的线性思维无法解决 |
共同点:面向对象和面向过程都是解决实际问题的一种思维方式
二者相辅相成,并不是对立的,解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理
二、类
类别,分门别类,物以类聚,人类,鸟类,动物类,植物类…
- 类时多个类似事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质
三、定义Python中的类
创建类的语法
class Student: #Student为类的名称(类名),由一个或多个单词组成,每个丹迪的首字母大写,其余小写
pass
class Student: #Student为类的名称(类名),由一个或多个单词组成,每个丹迪的首字母大写,其余小写
pass
class Student: #Student为类的名称(类名),由一个或多个单词组成,每个丹迪的首字母大写,其余小写
pass
print(id(Student))
print(type(Student))
print(Student)
输出:
1512775104816
<class 'type'> # 表明是class类型
<class '__main__.Student'>
类的组成
- 类属性
- 实例方法
- 静态方法
- 类方法
class Student:
native_pace='吉林' #直接写在类里的变量,称为类属性
def __init__(self,name,age):
self.name=name #self.name,称为实体属性,进行了一个赋值的操作,将局部变量的name的值赋给实体属性
self.age=age
#实例方法
def eat(self):
print('学生在吃饭...')
#静态方法
@staticmethod
def method():
print('我使用了staticmethod进行修饰,所以我是静态方法')
#类方法
@classmethod
def cm(cls):
print('我是类方法,因为我使用了classmethod进行修饰')
#在类之外定义的称为函数,在类之内定义的称为方法
def drink():
print('喝水')
四、对象的创建
- 对象的创建又称为类的实例化
- 语法:
- 实例名=类名
- 例子:
- stu=Student()
- 意义:有了实例,就可以调用类中的内容
#创建Student类的对象
stu1=Student('张三',20)
print(id(stu1))
print(type(stu1))
print(stu1)
输出:
1668138946320 #转换成十六进制就是 18464D44F10
<class '__main__.Student'>
<__main__.Student object at 0x0000018464D44F10>
查看类对象
print(id(Student))
print(type(Student))
print(Student)
输出:
2460596968352
<class 'type'>
<class '__main__.Student'>
对比上面实例对象和类对象的不同
五、使用对象
调用类的方法和属性
#创建Student类的对象
stu1=Student('张三',20)
stu1.eat() #对象名.方法名()
print(stu1.name) #调用实例对象的属性
print(stu1.age)
print('--------')
Student.eat(stu1) #这一行与上面调用eat()方法的功能相同,都是调用Student的eat()方法
#类名.方法名(类的对象)-->实际上就是方法定义处的self
输出:
学生在吃饭...
张三
20
--------
学生在吃饭...
对比两种调用方法的方式的不同,其实功能是相同的
六、类属性_类方法__类静态方法
类属性:类中方法外的变量称为类属性,被该类的所有对象所共享
类方法:使用@classmethod修饰的方法,使用类名直接访问的方法
静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法
print(Student.native_place) #访问类属性
Student.cm() # 调用类方法
Student.sm() # 调用静态方法
类属性的使用方式
#类似属性的使用方式
print(Student.native_pace)
stu1=Student('李四',20)
stu2=Student('王五',22)
print(stu1.native_pace)
print(stu2.native_pace)
#修改类属性
print('-------------------')
Student.native_pace='天津'
print(stu1.native_pace)
print(stu2.native_pace)
吉林
吉林
吉林
-------------------
天津
天津
表明类属性是共享的
类方法的使用方式
print('-----类方法的使用------')
Student.cm()
输出:
-----类方法的使用------
我是类方法,因为我使用了classmethod进行修饰
类方法
@classmethod
def cm(cls):
print('我是类方法,因为我使用了classmethod进行修饰')
类静态方法的使用
print('-----静态方法的使用------')
Student.method()
输出:
-----静态方法的使用------
我使用了staticmethod进行修饰,所以我是静态方法
静态方法
#静态方法
@staticmethod