面向对象与面向过程
面向过程是将问题按步骤进行思考
面向对象是将一个大的问题分为若干小问题,小问题本身再去用面向过程解决
对象:包含数据类型、方法
类
对象:“饼干”
类:做饼干的“模具”
“方法代码是共享的,属性数据不共享”。
创造实例对象
class My_Score: #类名首字母大写,采用驼峰原则
def __init__(self,name,score): #self指的是对象的地址
self.name = name
self.score = score
def say_score(self):
print('{0}的成绩是:{1}'.format(self.name,self.score))
s1 = My_Score('sxl',99) #使用类名,调用构造函__init__()
s1.say_score() #调用该对象所属类的方法
My_Score.say_score(s1) #解释器实际调用
sxl的成绩是:99
sxl的成绩是:99
- 对象的创建过程
首先__new__()方法: 用于创建对象
然后__init__()方法:初始化创建好的对象
类对象
类本身也是对象
print(type(My_Score))
<class 'type'>
类属性
class My_Score: #类名首字母大写,采用驼峰原则
school ='xupt' #类属性
def __init__(self,name,score):
self.name = name
self.score = score
def say_score(self):
print('{0}学校的{1}的成绩是:{2}'.format(My_Score.school,self.name,self.score))
print('{0}学校的{1}的成绩是:{2}'.format(self.school,self.name,self.score))
s1 = My_Score('sxl',99)
s1.say_score()
xupt学校的sxl的成绩是:99
xupt学校的sxl的成绩是:99
类方法
类方法,创建实例对象时不会创建它。只能是类对象本身使用。
class My_Score: #类名首字母大写,采用驼峰原则
school ='xupt' #类属性
def __init__(self,name,score):
self.name = name
self.score = score
def say_score(self):
# print('{0}学校的{1}的成绩是:{2}'.format(self.school,self.name,self.score))
print('{0}的成绩是:{1}'.format(self.name, self.score))
@classmethod
def print_school(cls):
print(My_Score.school)
s1 = My_Score('sxl',99)
s1.say_score()
My_Score.print_school()
sxl的成绩是:99
xupt
静态方法
__del__方法(析构函数)和垃圾回收机制
1.__del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象占用的资源,例如:打开的文件资源、网络连接等。
2.Python 实现自动的垃圾回收,当对象没有被引用时(引用计数为 0),由垃圾回收器调用__del__方法
__call__方法和可调用对象
用call方法实现和函数一样的传参调用
class SalaryAccount:
'''工资计算类'''
def __call__(self, salary):
yearSalary = salary*12
daySalary = salary//30
hourSalary = daySalary//8
return dict(monthSalary=salary,yearSalary=yearSalary,daySalary=daySalary,hourSalary=hourSalary)
s = SalaryAccount()
print(s(3000))
{'monthSalary': 3000, 'yearSalary': 36000, 'daySalary': 100, 'hourSalary': 12}