• Python学习-day6 面向对象概念


     开始学习面向对象,可以说之前的学习和编程思路都是面向过程的,从上到下,一步一步走完。

    如果说一个简单的需求,用面向过程实现起来相对容易,但是如果在日常生产,面向对象就可以发挥出他的优势了。

    程序的可扩展性,代码的可读性,以及后期的优化和二次开发,都是面向过程不可相比的,下面整理一下知识点。

    类:

    #Authon Ivor
    class dog(object):
        #公有变量,如果有私有变量,优先调用私有,如果没有调用公有
        age = 8
    
        def __init__(self,name,type):
            self.name = name
            self.type = type
    
        def bark(self):
            print("%s is barking,wang.wang..wang..." % self.name)
            self.type = "wang.wang..wang.."
    
        def get_type(self):
            print("{0} 's type is {1}".format(self.name,self.type))
    
    d = dog("lovely","Teddy")
    d2 = dog("diudiu","田园犬")
    
    d.bark()
    d2.get_type()
    d.age = 10
    print(d.age)
    print(d2.age)
    dog.age = 9
    print(d.age)
    print(d2.age)
    
    def bark2():
        print("bark")
    d.bark = bark2
    d.bark()
    View Code

    继承:

    #Authon Ivor
    
    class Person(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
            self.sex = "F"
        def talk(self):
            print("I'm a person!")
    
    class BlackPerson(Person):
        #先继承,再重构
        def __init__(self,name,age,strength):
            Person.__init__(self,name,age)
            self.strength = strength
        #重构函数
        def talk(self):
            print("I am BlackMan!")
    class WhitePerson(Person):
        pass
    
    B = BlackPerson("YoYo",22,"Strong")
    B.talk()
    View Code

    继承2:

    #Authon Ivor
    class SchoolMember(object):
        '''基类'''
        member = 0
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex =sex
            self.enroll()
    
        def enroll(self):
            print("[%s] has just enrolled ." % self.name)
            SchoolMember.member += 1
    
        def tell(self):
            print("info %s".center(20,"-") % self.name )
            for k,v in self.__dict__.items():
                print("%s:%s" % (k,v))
            print("info %s".center(20,"-") % self.name )
        #析构函数
        def __del__(self):
            print("33[31;1mmember [%s] is dead!33[0m" %self.name)
            SchoolMember.member -= 1
    
    class Teacher(SchoolMember):
        '''讲师类'''
        def __init__(self,name,age,sex,salary,tuition):
            # 新式类写法
            # super(Teacher,self).__init__(name,age,sex)
            # 经典类写法
            SchoolMember.__init__(self,name,age,sex)
            self.salary = salary
            self.tuition = tuition
    
    class Student(SchoolMember):
        '''学生类'''
        def __init__(self,name,age,sex,tuition):
            SchoolMember.__init__(self,name,age,sex)
            self.amount = 0
            self.tuition = tuition
    
    s1 = Student("Hebe",18,"F","Python")
    t1 = Teacher("Yoyo",22,"F",10000,"Python")
    t1.tell()
    print(SchoolMember.member)
    del s1
    print(SchoolMember.member)
    View Code

    封装补充:

    #Authon Ivor
    
    class F1(object):
        def __init__(self,arg):
            self.a = arg
    
    class F2(F1):
        def __init__(self,arg):
            self.b = arg
    
    class F3(F2):
        def __init__(self,arg):
            self.c = arg
    
    o1 = F1("Alex")
    o2 = F2(o1)
    o3 = F3(o2)
    
    #######通过o3调取到Alex#######
    print(o3.c.b.a)
    View Code

    继承补充:

    #Authon Ivor
    class F1(object):
        def a1(self):
            print("F1a1")
    
    class F2(F1):
        def a1(self):
            self.a2()
            print("F2a1")
        def a2(self):
            print("F2a2")
    
    class F3(F2):
    
        def a2(self):
            print("F3a2")
    
    #优先调取obj自身的方法
    obj = F3()
    obj.a1()
    View Code
  • 相关阅读:
    Setting up SharePoint Blogs, Wikis, and Announcements
    Reports 将透视表显示成没有级联关系的普通表
    TF80012: The document cannot be opened because there is a problem with the installation of the Microsoft Visual Studio v
    项目干系人分析的“四步法”
    Overload和Override的区别
    Add and Customize a Type of Work Item
    将所有的非DLL, PDB文件从一个位置Copy到另外一个位置,相同文件跳过
    如何删除工作项
    No Excel Calculation Services is available in the farm
    SPORTINGLIFE.COM
  • 原文地址:https://www.cnblogs.com/Darksugar/p/6638629.html
Copyright © 2020-2023  润新知