Python 中,一切皆对象。我们在前面学习的数据类型、函数等,都是对象。
面向过程适合简单、不需要协作的事务。 但是当我们思考比较复杂的问题,比如“如何造车?”,就会发现列出 1234 这样的步骤,是不可能的。那是因为,造车太复杂,需要很多协作才能完成。此时面向对象思想就应运而生了。比如面向过程就像我们用手去洗衣服一样,需要自己亲力亲为,接水,放洗衣粉,洗衣服,晾干。而面向对象则像似一台全自动洗衣机一样。封装了所有行为。显得格外方便。
目录
格式
class Student:
company = "SXT" #类属性
count = 0 #类属性
def __init__(self,name,score):
self.name = name #实例属性
self.score = score
Student.count = Student.count+1
def say_score(self): #实例方法
print("我的公司是:",Student.company)
print(self.name,'的分数是:',self.score)
类
我们把对象比作一个“饼干”,类就是制造这个饼干的“模具”。
一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属性值(不共享状态)。更具体一点:“方法代码是共享的,属性数据不共享”。
class Student:
def __init__(self,name,score): #构造方法第一个参数必须为 self
self.name = name #实例属性
self.score = score
def say_score(self): #实例方法
print(self.name,'的分数是:',self.score)
s1 = Student('张三',80) #s1 是实例对象,自动调用__init__()方法
s1.say_score()
构造方法__init__和__new__方法
__new__()方法: 用于创建对象,但我们一般无需重定义该方法。__init__()方法:初始化创建好的对象,初始化指的是:“给实例属性赋值”。
def __init__(self,name,score):#self代表创建好的对象
self.name = name #实例属性
self.score = score
class Student:#类型一般首字母大写
def __init__(self,name,score):
self.name=name
self.score=score
def say_score(self):
print("{0}的分数是:{1}".format(self.name,self.score))
s1=Student('xg',18)
s1.say_score()
s1.age=20
s1.salary=30000#增加对象
print(s1.salary)
实例方法
实例方法的定义格式如下:
def 方法名(self [, 形参列表]):
函数体
方法的调用格式如下:
对象.方法名([实参列表])
1. dir(obj)可以获得对象的所有属性、方法
2. obj.__dict__ 对象的属性字典
3. pass 空语句
4. isinstance(对象,类型) 判断“对象”是不是“指定类型”
s1.age=20
s1.salary=30000#增加对象
print(s1.salary)
s2=Student('gaoxixi',100)
s2.say_score()
Student.say_score(s2)
print(dir(s2))#对象属性和方法
print(s2.__dict__)#对象的属性字典
print(isinstance(s2,Student))#判断对象是不是类的实例对象
类
类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod 来定义。第一个 cls 必须有;cls 指的就是“类对象”本身;
#类方法
class Student:
company = "SXT" # 类属性
@classmethod
def printCompany(cls):
print(cls.company)
Student.printCompany()
静态方法
Python 中允许定义与“类对象”无关的方法,称为“静态方法”。
静态方法通过装饰器@staticmethod 来定义,格式如下:
@staticmethod
def 静态方法名([形参列表]) :
函数体
class Student:
company = "SXT" # 类属性
@staticmethod
def add(a, b): # 静态方法
print("{0}+{1}={2}".format(a,b,(a+b)))
return a+b
Student.add(20,30)
__del__方法(析构函数)和垃圾回收机制
_del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象
占用的资源,例如:打开的文件资源、网络连接等。