python面向对象编程
python中一切都是对象!数据与操作数据的方法都要封装到对象中。
面向对象和面向过程
1.面向过程:流程化。
开车-1.发动 2.挂挡 3.踩油门 4.出发
2.面向对象:软件中对象之间的关系
如何造车?
—需要多人协作,多种零件组合
1.轮胎
2.发动机
3.车壳
4.座椅
5.玻璃
面向对象的思考方式
先从问题中找名词,再从问题中找动词,确立这些名词哪些可以作为类,再确定类的属性和方法,确定类之间的关系。
类是对象的模板。例如:做饼干的模具,类是模具,对象是饼干。
对象包括三个部分:id、type、value(又包括属性attribute、method)
数据
数组
结构体
对象
类的定义
用class,内含方法和数据
class DataSalary:
def __init__(self,name,age):
#用构造函数来初始化实例对象的实例属性
self.name=name #实例属性
self.age=age #实例属性
def mydata(self):
print("{0}的工资是{1}".format(self.name,self.age))
s1=DataSalary("明明",26)#通过类名(参数列表)来调用构造函数
s1.mydata()
构造函数__init__()
作用:负责初始化创建好的对象,给实例属性赋值。
规则:
1.类中方法定义的第一个值必须是self,是指刚刚创建好的实例对象。
2.通过类名(参数列表)来调用构造函数,调用后将创建好的对象返回给响应的变量。
s1=DataSalary("明明",26)
3.用构造函数来初始化实例对象的实例属性,如
def __init__(self,name,age):
self.name=name #实例属性
self.age=age #实例属性
4.相当于c++中的指针,c中的this
实例属性
1.self.实例属性名=初始值
2.在类内,即为self.xxx调用
3.在类外,先创建对象 s1=DataSalary(),调用构造函数,然后再s1.xxx
实例方法
def 方法名(self[,形参列表])
函数体
调用时需要 对象.方法名([实参列表])
实例对象的方法调用本质
a=DataSalary()
a.mydata()相当于DataSalary.mydata(a)
其他操作
1.dir(obj)
print(dir(对象))可以获得对象的所有属性和方法
2.obj.dict
print(对象.dict)为对象的属性字典
3.pass 空语句
class man
pass
表示还没想好
4.isinstance(对象,类名):确定对象是否是指定类
类属性和类方法
类属性从属于类对象,也称为类变量,可以被所有实例对象共享
类属性的定义方式:
class Student:
count=0
company="山师"
def __init__(self,name,age):
self.name=name
self.age=age
Student.count=Student.count+1
def my(self):
print(self.name,"的年龄是:",self.age)
print("公司是",self.company)#这里为什么是self.company而不可以是Student.company?
s1=Student("乐乐",12)
s2=Student("明明",13)
s1.my()
print("共有",Student.count,"个学生")#而这里却是Student.count而不是self.count?
print(type(Student))
print(type(s1))
内存分析
析构函数和垃圾回收机制
—del—销毁对象所需要的操作,对象没有被引用时,会被自动销毁。不需要自定义析构方法。
class Person:
def_del_(self):
print("销毁对象":{0}".format(self))
p1=Person()
p2=Person()
del p2
print("程序结束")
_call_方法和可调用对象
定义该方法的对象为可调用对象,即该对象可以像函数一样被调用。
a=30
b=50
c=a+b
其实是d=a.add()
aa()
class SalaryAccount:
def __call__(self,salary):
yearSalary=salary
monthSalary=salary/12
daySalary=salary/365
print("算工资啦")
return dict(yearSalary=salary,monthSalary=monthSalary,daySalary=daySalary)
s=SalaryAccount()
print(s(210000))