python(类的封装调用/继承/多态)

Posted mr-zy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python(类的封装调用/继承/多态)相关的知识,希望对你有一定的参考价值。

一、类的定义
类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
 
对象:类实例化出来的叫做对象
 
对象和类的关系:类和对象的关系就像模具和铸件的关系,类的实例化的结果就是对象,而对对象的抽象就是类。
 
类和实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如 Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
 
仍以 Student 类为例,在 Python 中,定义类是通过 class 关键字:
class Student(object):
    pass

class 后面紧接着是类名,即 Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用 object类,这是所有类最终都会继承的类。

1.类定义:
  • class定义类
  • class 后面加 类名称 加 () 加 :

2.类名称定义规范:

  • 不要以纯数字命名
  • 不要以python中保留字符(关键字)来命名
  • 不要以文件名命名
  • 不能出现特殊字符
  • 要简短且见名知义
  • 当类名称中有多个单词时,应采用驼峰式(每个单词首字母大写) --> XinFangShuo()

 定义好了 Student 类,就可以根据 Student 类创建出 Student 的实例,创建实例是通过类名+()实现的:

bart = Student()

可以看到,变量 bart 指向的就是一个 Student 的实例,而 Student 本身则是一个类。

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把 name,score 等属性绑上去:
class Student(object):
    def __init__(self, name, score):
        self.name = name 
        self.score = score        

注意:特殊方法“__init__”前后分别有两个下划线!!!

注意到__init__方法的第一个参数永远是 self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到 self,因为 self 就指向创建的实例本身。
 
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但 self 不需要传,Python 解释器自己会把实例变量传进去:
 
 bart = Student(Bart Simpson, 59)

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量 self,并且调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认

参数、可变参数、关键字参数和命名关键字参数。
 
class Four():           #类的定义
    def sub(self,x,y):
        return x + y

"""
class Dog():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def sit(self):
        print (self.name.title() + ‘ ‘ + "is now sitting")

    def roll_over(self):
        print (self.name.title() + ‘ ‘ + "is now roll over")

my_dog = Dog(‘willie‘,6)    #参数实例化
# your_dog = Dog(‘lucy‘,3)
my_dog.sit()
my_dog.roll_over()
"""

"""
class Four_operations():
    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)
    def add(self):
        return self.a + self.b

    def reduce(self):
        return self.a - self.b

    def ride(self):
        return self.a * self.b

    def Except(self):
        return self.a / self.b

operation = Four_operations(‘12‘,‘4‘)
print operation.add()
print operation.reduce()
print operation.ride()
print operation.Except()
"""

 

 二、类的调用
 调用类下的方法,必需通过类的的实例/类名()进行调用
  •  当类中初始化方法__init__中存在参数时,则在实例化时,需要往实例括号中传入参数
  •  当类中无初始化方法或者__init__中不存在参数时,则在实例化时,不需要往实例括号中传入参数,而在调用方法时再进行传参
class Four(): 
    def sub(self,x,y):
        return x + y

print Four().sub(2,3)


class Four_operations():
    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)
    def add(self):
        return self.a + self.b

    def reduce(self):
        return self.a - self.b

    def ride(self):
        return self.a * self.b

    def Except(self):
        return self.a / self.b

operation = Four_operations(12,4)        #实例化
print operation.add()
print operation.reduce()
print operation.ride()
print operation.Except()

 

 三、继承
1.单继承和多继承
  • 一个对象使用另一个对象的属性和方法,被继承的类也称父类
  • 多重继承就是一个子类继承多个父类
class Four():
    def sub(self,x,y):
        return x + y

class Five(Four):       #Five类继承了Four类 --> Five 类拥有了 Four 类下的所有函数方法
    def jian(self,a,b):
        return a - b

print Five().sub(2,5)
class Father():
    def __init__(self,name,sport,sex):
        self.name = name
        self.sport = sport
        self.sex = sex
    def Surname(self):
        print self.name + "姓张"
    def hobby(self):
        print self.name + "like" + " " + self.sport

class Son(Father):
    def study(self):
        print self.name + " " + "study very good"
    def Sex(self):
        print self.name + " " + "is" + " " + self.sex
so = Son(张四,"play basketball","boy")
so.Surname()
so.hobby()
so.study()
so.Sex()
class car():
    "多继承"
    def __init__(self,brand,type,year,mileage):
        self.brand = brand
        self.type = type
        self.year = year
        self.mileage = mileage
    def make(self):
        print self.brand + self.type + "" + str(self.year) + "生产的!"

    def update_mileage(self,mile):
        if mile < self.mileage:
            print "请勿修改里程数!"

class aircraft():
    def __init__(self,name,destination):
        self.name = name
        self.destination = destination
    def bound(self):
        print self.name + "开往" + self.destination

class boat(car,aircraft):
    def __init__(self,brand,type,year,mileage,name,destination):
        self.brand = brand
        self.type = type
        self.year = year
        self.mileage = mileage
        self.name = name
        self.destination = destination
my_boat = boat("泰坦","尼克号",2010,500,"泰坦尼克号","宁波")
my_boat.make()
my_boat.bound()

 

 四、多态(重写父类方法)
class Four():
    def sub(self,x,y):
        return x + y

class Five(Four):       #Five类继承了Four类 --> Five 类拥有了 Four 类下的所有函数方法
    def jian(self,a,b):
        return a - b

    def sub(self,x,y):
        return x * y

print Five().sub(3,6)

 

 

以上是关于python(类的封装调用/继承/多态)的主要内容,如果未能解决你的问题,请参考以下文章

封装,多态,继承. super的方法,类的约束,

python-17-对象多态

Python学习之旅---多态(类的相关知识,面向对象三大特性:继承-多态-封装)

Python面向对象之类的封装继承与多态

Python3-2020-测试开发-20- 面向对象之封装,继承,多态

Python学习之旅--封装继承多态