python入门(五)
作者:互联网
通过前面的学习我们知道,事与物都是对象,我们都能将其定义为一个类,python中将该类定义为object,我们所创建的类都是直接或间接继承与object,他们都有object类的属性和方法,面向对象有抽象、继承、封装、多态四个特性。
抽象
创建类要通过class关键字来创建,比如有一个人,我们要实现他的类,我们把它抽象为Person
class Person:
pass #如果没有想要封装的属性我们可以通过pass关键字来结束
封装
对象有自己的属性和方法,比如一个人,他有自己的姓名和年龄的属性,他能干什么这是他的方法,我们可以定义他的名字属性为name,年龄为age,他能跑步、说话的方法,我们可以定义跑步run(),speak()
class Person:
name = 'Tom'
age = 18
def run(self):
print('我正在跑步')
def speak(self):
print('我正在说话')
p = Person() # p就是类的一个实例体现
print(p.name,p.age) #打印结果: Tom 18
p.run() #打印结果: 我正在跑步 调用run()方法我们不用传入参数,self是对象的实例,直接用p.run()就能实现实例方法
p.spaek() #打印结果: 我正在说话
这样我们就创建了一个叫Tom的人,但是我们通过p2 = Person()再创建一个人,我们打印他的名字和年龄会发现,他也叫Tom,但是这两个人显然不是同一个人,我们需要的是通过这个类来创建另外一个叫jack的人,并且运行方法run()他们会打印不同的跑路方式
class Person:
name = 'Tom'
age = 18
def __init__(self,name=None): #name=None表示参数可以不传入,当不传入参数创建实例时我们的name在实例中找不到就回去类中去找,实例的name还是Tom
if name is not None:
self.name = name
def run(self,where):
print('%s在%s跑步'%(self.name,where))
p = Person('jack')
p2 = Person('jerry')
print(p.name,p2.name) # 打印结果: jack jerry
p.run('公园') #打印结果:jack在公园跑步
p2.run('马路') #打印结果:jerry在马路跑步
我们是怎么实现Person('jack')就创建了一个叫jack的人呢,这里我们用到了__init__()方法,我们在创建类的时候,会自动调用__init__()方法,我们重新定义__init__(),在里面加入name参数,我们把jack传入到Person类中进行调用创建实例,并改变实例的name.
继承
什么是继承,比如猫和狗,他们都有相同的特性,他们都是动物,那么我们可以把动物当成一个类Animal,猫抽象Cat类,狗抽象为Dog类,猫会叫,狗也会叫,动物会叫,所以我们定义一个方法cry()
class Animal:
def cry(self):
print('呜呜呜')
class Cat(Animal):
pass
class Dog(Animal):
pass
cat = Cat()
cat.cry() #打印结果: 呜呜呜
dog = Dog()
dog.cry() #打印结果:呜呜呜
我们发现打印的是呜呜呜,那么我们就调用了Animal的cry()方法,我们的cat在调用cry()时在Cat类中找不到,就回去父类去找,找不到就会去祖父类去找,知道object类,如果还找不到就会报错
我们要实现猫叫喵喵喵,就从写cry()方法
class Cat(Animal):
def cry(self):
print('喵喵喵')
cat = Cat()
cat.cry() #打印结果: 喵喵喵
我们这样实现会发现不是很对劲,为什么不直接实现Cat类不去继承Animal,这样我们就要考虑到什么情况使用继承比较好,那就是有些属性和方法是固定不变的那么实现继承就是正确的。
多态
什么是多态?比如a=1,那么就会创建一个int类型值为1的对象,为什么会把1认定为就是int型呢?python是一门动态编程语言,在内部后自动对1进行判断,然后赋给他int类型,这是多态的体现,也就是人们提出的鸭子模型,如果一个物体跑起来像鸭子,那么他就是鸭子,多态更注重于方法的实现,不在关注类本身。
class Duck:
def run(self):
print('我像一只鸭子')
class A:
def run(self):
print('我看起来像一只鸭子')
def func(obj):
obj.run()
duck = Duck()
a = A()
func(duck) #我像一只鸭子
func(a) #我看起来像一只鸭子
那么我们说duck和a都是一只鸭子
标签:run,入门,python,self,cry,Person,class,name 来源: https://www.cnblogs.com/llm123456/p/11872934.html