面向过程:吃饭的时候,必须严格按照步骤,第一步生火,第二步洗菜,第三步放油,第四步放菜,第五步炒菜,第六步端菜
面向对象:只需要点外卖打个电话,不需要知晓菜是谁买的,饭是谁做的,外卖是是谁送的,只要拿到饭了就可以
对象是一个抽象的概念,表示任意存在的事物。通常将对象划分为两个部分,静态部分称为属性,动态部分称为行为。
类是多个类似事物组成的群体的统称,是封装对象的属性和行为的载体,反过来说,具有相同属性和行为的一类实体被称为类。
类是对象的抽象,对象是类的实体(实例)。
将对象的属性和行为封装起来,而将这些封装起来的载体就是类。
_类名__属性
子类通过继承复用了父类的属性和行为的同时,又增加了子类特有的属性和行为,提高了代码的复用性。
class A(object):
pass
class B(A):
pass
一个父类衍生出不同的子类,子类继承父类特征的同时,也具备了自己的特征,并且能够实现不同的效果,这就是多态化的结构,提高了代码的可扩展性和可维护性。
class Animal(object):
def eat(self):
print('动物会吃')
class Dog(Animal):
def eat(self):
print('狗吃骨头')
class Cat(Animal):
def eat(self):
print('猫吃鱼')
def fun(obj):
obj.eat()
fun(Animal()) #因为Animal是类对象,Animal()为实例对象
在python中,类的定义使用class关键字来实现,语法如下:
class ClassName:
'''类的帮助信息''' #类的帮助信息(即注释)
statement #类体(由类变量、方法和属性等定义语句组成)
ClassName:用于指定类名,一般使用大写字母开头,如果类中包含两个单词,第二个单词的首字母也大写。
class Student:
grade = 'four' #类属性,直接写在类中的变量叫类属性
#初始化方法
def __init__(self,name,age): #name与age是实例属性
self.name = name #self.name是实例属性,这里进行了赋值操作,属性名与变量名可以不相同
self.age = age
#实例方法
def info(self):
print('我的名字是'+self.name+' 年龄是'+self.age)
#类方法
@classmethod
def cm(cls): #类方法中写cls
print('类方法')
#静态方法
@staticmethod
def sm(): #在静态方法中不允许写self
print('静态方法')
在类之外定义的称为函数,在类之内定义的称为方法
实例方法用来修改实例属性,类方法用来修改类属性
类中方法外的属性称为类属性,被该类所有的对象所共享
#调用语法
print(Student.grade)
print(stu1.grade)
当Student.grade改变时,stu1.grade也改变
使用@classmethod修饰的方法,使用类名直接访问的方法
#调用语法
Student.cm()
使用@staticmethod修饰的方法,使用类名直接访问的方法
#调用语法
Student.sm()
stu1 = Student('张三',20)
在实例对象stu1中,会有一个类指针指向类对象Student,此时stu1就可以调用类中的方法和属性
stu1.info()#调用实例方法
print(stu1.name)#调用初始化方法
Student.info(stu1)#调用实例方法的另一种形式
比如上面的stu1张三同学想要再添加一个性别属性,直接在类外进行赋值即可动态绑定
stu1.gender = '女'
如果想要添加动态方法,则在类外定义一个函数,并将此函数赋给对象的方法
def show():
print('动态绑定方法')
stu1.show = show
#调用
stu1.show()
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print('姓名:{0},年龄:{1}'.format(self.name, self.age))
# 定义子类
class Student(Person):
def __init__(self, name, age, score):
super().__init__(name, age) # 重写
self.score = score
def info(self):
super().info() #继承
print('成绩{0}'.format(self.score))#重写
p = Person('sun', 2)
p.info()
r = Student('jie', 3, 45)
r.info()
class Student:
def __init__(self, name):
self.name = name
def __add__(self, other):
return self.name+other.name
def __len__(self):#重写此方法用来查看类中某属性的长度
return len(self.name)
stu1 = Student('张三')
stu2 = Student('李四')
stu3 = Student('Jack')
s = stu1+stu2#因为Student类中的add方法使stu1与stu2具有加的功能
print(s)
r = stu1.__add__(stu2)#调用对象方法
print(r)
m = stu3.__len__()
print(m)
__new__方法是创建对象,并要返回一个实例对象,__init__方法则是初始化这个对象