• python学习笔记-Day6(3)


    代码书写原则:

    1)不能重复写代码

    2)写的代码要经常变更

    编程模式概述

    • 面向过程:根据业务逻辑从上到下写垒代码
    • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
    • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

    面向对象编程

    面向对象的三大特性:封装、继承和多态

    一、封装

    class Role(object):
    
        def __init__(self,name,role,weapon,life_value): #初始化
            self.name = name
            self.role = role
            self.weapon = weapon
            self.life_value = life_value
        def buy_weapon(self,weapon):
            print("%s is buying [%s]" %(self.name,weapon))
            self.weapon = weapon
    #role 的实例
    #把一个抽象的类变成一个具体对象的过程叫实例化
    p1 = Role('Alan','Police','B10',100)
    t1 = Role('Petter','Terrorist','B11',100)
    
    p1.buy_weapon("AK47") #Role.bur_weapon(p1,"AK47")
    t1.buy_weapon("B51")
    
    print("P1:",p1.weapon)
    print("T1:",t1.weapon)

     二、继承

    class SchoolMember(object):
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
        def enroll(self):
            print("SchoolMember%s is enrolled!" %self.name)
    
        def tell(self):
            print("My name is  %s" % self.name)
    
    class Teacher(SchoolMember):
        def __init__(self,name,age,sex,course,salary):
            super(Teacher,self).__init__(name,age,sex)
            SchoolMember.__init__(self,name,age,sex)
            self.course = course
            self.salary =  salary
    
        def teaching(self):
            print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
    
    class Student(SchoolMember):
        def __init__(self,name,age,sex,course,tuition):
            super(Student,self).__init__(name,age,sex)
            self.course = course
            self.tuition = tuition
    
        def pay_tuition(self):
            print("Student [%s] paying tuition [%s]" %(self.name,self.tuition))
    
    t1 = Teacher("John", 30, "Male", "C", 10000)
    t2 = Teacher("Jonna", 25, "Female", "UI",15000)
    s1 = Student("Jeff", 27, "Male", "PY", 10000)
    s2 = Student("Alice", 28, "Male", "Java", 12000)

    三、多态

    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
    那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

    python本身不支持多态,以下是python模拟的多态:

    class Animal:
        def __init__(self, name):    # Constructor of the class
            self.name = name
        def talk(self):              # Abstract method, defined by convention only
            raise NotImplementedError("Subclass must implement abstract method")
    
    class Cat(Animal):
        def talk(self):
            return 'Meow!'
    
    class Dog(Animal):
        def talk(self):
            return 'Woof! Woof!'
    
    def animal_talk(obj):
        print(obj.talk())
    
    c = Cat("Cat")
    d = Dog("Dog")
    animal_talk(c)
    animal_talk(d)
    
    '''
    animals = [Cat('Missy'),
               Dog('Lassie')]
    
    for animal in animals:
        print (animal.name + ': ' + animal.talk())
    '''
  • 相关阅读:
    牛客小白月赛4-E-浮点数输出 字符串
    HDU 5319 Painter(模拟)
    AtCoder Regular Contest 098 D
    strchr函数的用法
    fgets()
    格式
    Uncaught TypeError: Cannot read property 'addEventListener' of null
    window cmd下常用操作
    nuxt导入css样式
    ERROR EPERM: operation not permitted, mkdir 'C:UsersAdministratorDesktop ext uxtasic.nuxtcomponents'
  • 原文地址:https://www.cnblogs.com/luoye00/p/5247577.html
Copyright © 2020-2023  润新知