面向过程和面向对象
- 面向过程:(如何一步一步的做)
- 强调的是功能行为
- 关注的是解决问题需要哪些步骤
- 面向对象:(找会做的对象来做)
- 将功能封装进对象,强调具备了功能的对象
- 关注的是解决问题需要那些对象
类
定义类的语法:
class 类名():
类体
类名后面的括号可以不写,但是如果有继承父类的话就一定要加上,类体中包含 属性(特征)和方法(功能)
实例化对象语法:对象名 = 类名()
# 创建类 - 人
class Person():
# 属性
name = 'bobo'
age = 18
sex = 'woman'
role = 'tester'
# 方法
def work1(self):
print("WEB testing")
def work2(self):
print("APP testing")
# 实例化对象
person1 = Person()
# 对象使用类中的属性
# 使用属性
name = person1.name
print("name:",name)
# 修改属性
person1.name = 'bobo_update'
print("修改后的name:",person1.name)
# 对象使用类中方法
person1.work1()
person1.work2()
构造函数
定义:
在python类中,def __init__函数(参数)
可以为类实现初始化的作用
__init__
方法是python已经定义好的,只要调用即可,在类中两个下划线开头的函数是生命该属性为私有,只能在类的内部使用
实例化对象,会自动调用__init__
方法,对于init中自定义的参数还是要在这传入,self不需要传值
语法:实例名 = 对象名(参数)
self:类中的方法都是通过对象执行的,并且对象执行这些方法都会将对象空间传给方法中的第一个参数self,
self其实就是类中方法的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self,self就代表对象。
class Person1():
def __init__(self,name,age,sex,role):
self.name = name
self.age = age
self.sex = sex
self.role = role
def work3(self):
print("work3")
def work4(self):
print("work4")
# 实例对象
person1 = Person1('bobo1',19,'man','test001')
# 对象使用属性
name = person1.name
age = person1.age
print("name:",name)
print("age:",age)
# 对象使用方法
person1.work3()
属性
类中属性
- 属于整个类的属性特征 定义在类的中间,不是在函数中
- 公有属性 在类中、类外(子类)都可以用
- 私有属性 以__开头 只在类中使用
- 调用:
类名.属性名
实例属性
- 实例对象的属性特征, 定义在构造方法中的属性
- 公有实例属性 在类中、类外(子类)可以使用
- 私有实例属性 以__开头的属性 只在类中使用
- 调用:
类外边:对象名.属性名
类中:self.属性名 self == 对象
class Person1():
height = 180
__weight = 120
print("类中私有属性 weight:",__weight)
def __init__(self,name,age,sex,role):
self.name = name
self.age = age
self.sex = sex
self.role = role
def work3(self):
print("work3")
print("类中使用属性:",self.role)
def work4(self):
print("work4")
# 实例对象
person1 = Person1('bobo1',19,'man','test001')
# 对象使用属性
name = person1.name
age = person1.age
print("name:",name)
print("age:",age)
# 对象使用方法
person1.work3()
# 类属性的使用
height = person1.height
print("类中属性 height:",height)
# 实例属性
print("类外边使用实例属性:",person1.name)
方法
实例方法
- 实例方法:特征是第一个参数是self ,只能被实例对象调用
- 共有实例方法:在类中,类外,子类中都可以调用的方法
对象名.实例方法名
- 私有实例方法:在类中调用的方法
self.实例方法名
class Person2():
# 共有
def work1(self):
print("共有实例方法work1")
# 私有
def __work2(self):
print("私有实例方法work2")
def role(self):
self.__work2() # 在类里调用私有实例方法
self.work1() # 在类里调用共有实例方法
print("共有实例role")
# 共有实例方法在类外调用
p1 = Person2()
p1.work1()
p1.role()
# 私有实例在类外调用
p1.__work2() # 报错 'Person2' object has no attribute '__work2'
类方法
- 类方法:特征是第一个参数是cls,cls代表类本身
- 装饰器 @classmethod
- 可以被类或者类的实例对象调用
静态方法
- 静态方法:特征是没有默认参数
- 装饰器 @staticmethod
- 可以被类或者类的实例对象调用
属性方法
- 装饰器 @property
class Person2():
@classmethod
def class_method(cls):
print("class method")
@staticmethod
def static_method():
print("static method")
@property
def property_method():
pass
p1 = Person2()
p1.class_method()
Person2.class_method()
p1.static_method()
Person2.static_method()