Python中的类与对象
之前Python类这一块有点薄弱,导致每次写起代码的时候都用的云里雾里的,趁有空赶紧补一下相关的知识(
两大编程思想
面向过程
-
面向过程解决的问题比较简单,可以用线性的思维去解决。
-
例如:如果要做菜(西红柿炒鸡蛋)。然后要按照:准备西红柿、鸡蛋——切西红柿、打鸡蛋——开火热油——炒鸡蛋——炒西红柿——一起装盘上菜。
-
如此的解决事情的方式是一个线性的思维方式,必须按照一定的顺序去解决该问题。
面向对象
-
面向对象解决的问题比较复杂,使用简单的线性思维无法解决。
-
例如:还是要吃西红柿炒鸡蛋。可以直接打开手机饿了么/美团,直接下单西红柿炒鸡蛋。至于商家如何做这件事,交给商家去处理,我们无须操心。
-
如此解决事情的方式是直接找这个事件的参与者,从宏观上把握事件之间的联系。
两种思想的联系
- 两者是相辅相成的,并不是相互对立的。解决复杂的问题,通过面向对象的方式有利于我们从宏观上把握事务之间复杂的关系,方便我们分析整个系统。但是在具体到微观的操作上,仍然需要使用面向过程的方式进行处理。
类和对象
什么是类
-
类可以直接理解为分门别类,就是多个类似事物组成的群体的统称,能够帮助我们快速理解和判断事物的性质。
-
例如:人类,鸟类,手机,电脑等。
数据类型
- 数据类型就是一种特殊的类。例如:
int
,string
等等都是数据类型,不同的数据类型属于不同的类。
print(type(100)) <class 'int'>
print(type(99)) <class 'int'>
对象
-
像 100、99 都是
int
类下包含的相似的不同的个例,这样子的个例在Python的专业术语中就叫做实例或者对象。 -
Python中一切皆对象: 在Python中创建的任何东西都是对象,例如:类对象、字典对象、列表对象等等。
类和对象的创建
类的创建
- 创建类的语法:
class Student: # class+类名
pass
-
类的组成:
-
类属性:是独立于类的实例以外的属性,通过直接调用类得到。
-
实例属性:是该类的实例的属性,在创建实例的时候需要传入实例属性的参数。一般用
def __init__(self)
来定义。 -
实例方法:传入参数为该类的实例的函数,实例可以直接调用。一般用
def fuction_name(self)
来定义。 -
静态方法:没有传入参数的该类的函数,通过类来调用。在定义前需要加上
@staticmethod
注释,一般用def fuction_name()
来定义,注意没有传入参数。 -
类方法:传入参数为类的函数,通过类来调用。在定义前需要加上
classmethos
注释,一般用def fuction_name(cls)
来定义。
-
-
创建类的样例:
class Student:
# 类属性
native_place = '广东'
# 实例属性
def __init__(self,name,age):
self.name = name # 将获取到的name参数传给self.name作为类的实例属性
self.age = age # 将获取到的age参数传给self.age作为类的实例属性
# 实例方法
def info(self): # 传入的参数为self
print('我的名字叫:',self_name,',年龄是:',self_age)
# 类方法
@classmethod
def cm(cls): # 传入的参数为cls
print('类方法')
# 静态方法
@staticmethod
def sm(): # 传入的参数为空
print('静态方法')
-
创建类的注意事项:
-
类名定义的规范:每个单词的首字母大写,其余字母小写。
-
函数如果定义在类之外就称作函数,函数定义在类之内称作方法。
-
对象的创建
-
对象的创建又称作类的实例化,有了实例,就可以调用类中的方法。
-
创建语法:
实例名=类名()
-
以上面创建的
Student
类为例,如果需要创建一个实例,可以通过:
stu = Student('张三',20) # 创建实例,创建的时候需要传入参数
print(stu.name) # 实例属性,输出'张三'
print(stu.age) # 实例属性,输入20
stu.info() # 调用实例方法,输出为'我的名字叫张三,年龄是20'
Student.info(stu) # 另一种调用实例方法
-
调用实例方法有两种途径,一是
对象名.方法名()
,二是类名.方法名(类的对象)
-
实例对象除了保存实例的参数以外,还会保存一个类指针,指向定义的类。
类属性、类方法、静态方法
类属性的使用方式
- 调用类属性直接用
类名.属性名
即可,也可以用实例名.属性名
。例如:
print(Student.native_place) # 输出'广东'
stu1 = Student('张三',20) # 创建实例stu1
stu2 = Student('李四',30) # 创建实例stu2
print(stu1.native_place) # 输出'广东'
print(stu2.natice_place) # 输出'广东'
-
类属性相当于类里面不同实例的共同属性,在该类下创建不同实例的类属性都相同。
-
类属性支持动态修改,并不是定义好以后就不能改变了,修改方法如下。
Student.native_place = '天津'
print(stu1.native_place) # 输出为天津
print(stu2.native_place) # 输出为天津
类方法的使用方式
- 类方法是使用
@classmethod
修饰的方法,可以通过使用类名直接访问,例如:
Student.cm() # 调用类方法,输出为'类方法'
静态方法的使用方式
- 静态方法是使用
@staticmethod
修饰的方法,可以通过使用类名直接访问,例如:
Student.sm() # 调用静态方法,输出为'静态方法'
动态绑定属性和方法
Python是动态语言,在创建对象以后,可以动态地绑定属性和方法。
动态属性绑定
- 如果想要为某一个实例单独绑定新的属性,可以直接在创建实例完成以后,用
实例名.属性名=属性值
的方式为实例单独绑定新的属性,例如:
stu1 = Student('张三',20)
stu2 = Student('李四',30)
# 动态绑定属性
stu1.sex = '男'
print(stu1.name,stu1.age,stu1.sex) # 输出 '张三' 20 '男'
print(stu2.name,stu2.age,stu2.sex) # 会报错,因为stu2不存在sex属性
动态方法绑定
- 如果想要为某一个实例单独绑定方法,可以直接在创建实例完成以后,用
实例名.方法名=函数名
的方式为实例单独绑定新的方法,例如:
def show():
print('我是新函数')
# 动态绑定方法
stu1.show = show
stu1.show() # 调用stu1的show方法,输出为'我是新函数‘
stu2.show() # 会报错
- 0
-
分享