面向对象

Posted hongfeng2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

面向过程:根据业务逻辑从上到下垒代码,所有的事都需要自己去处理.

引入函数,避免可重复使用代码.面向函数: 将某功能代码封装到函数中,以后直接调用,不需要再次编写

面向对象:先要写一个类, 对函数进行分类和封装,类里可以有很多函数,让开发“更快更好更强...”

像Java和C++等编程语言仅支持面向对象编程,而Python支持函数式编程和面向对象编程混用

 

列如:

# 函数式编程

def bar():

    print(‘bar‘)

bar()  # 直接调用函数

 

# 面向对象编程

class Foo:  # 创建类

   def  bar(self):  # 在类里面定义函数 这里self是一个特殊的参数 创建对象时Foo将自身传进来

       print(‘bar‘)                                  

 

obj = Foo()  # 创建一个对象

obj.bar()  # 由对象去访问类里面函数

 

#定义类

class Student:   #py2要加括号()

    note = "class information" #类属性,静态的.实例里可以调用类属性

    __privae = "this is private info"  #私有属性,只能在类内调用,不允许类外直接调用.接口技术

    def __init__(self,name,age,sex,class_,score):     #魔术方法,构造函数,做类定义的,self就是我

        self.name = name

        self.age = age                                       

        self.sex = sex

        self.class_ = class_   #这些叫实例属性,是动态的,随实例变化

    def detail(self):                 #这个函数在类内,叫方法

        print("your name is {}.format(self.name)")

    def get_score(self):

        if self.score >= 90:

            print("your score is A")

        if 60 < self.score < 90:

            print ("your score is B")

        if self.score < 60:

            print("your score is C")

    @staticmethod     #静态方法

    def static_():

        print("class note is {}".format(Student.note))

    @classmethod  #静态方法类名变了就出错.引入class的方法,类名改了还是可以调用.区别是cls

    def class_method(cls):

        print("class private info is {}".format(cls.__private))

 

#创建一个对象,这就叫实例化,s1相当就是self(我)的别名,别人叫得名字.

s1 = Student("hf",35,"male","python")      

实例化调用类s1的时候self就被替换成s1,s2时self被替换成s2.

实例化就是封装的过程

print(s1.name,s1.class)

s1.detail()    #实例方法,类实例化后才能调用的方法

s2 = Student("hong",25,"male","java",90)

s2.get_score()

s2.score = 95

s2.get_score()

#类属性直接调用,可不通过实例

#实例可以调用类属性

print (s1.note)

print (Student.note)

 

静态方法:

跟实例没什么关系,调用类里的信息,用类名.类属性

类方法:

静态方法类名变了就出错.引入class的方法,类名改了还是可以调用.区别是cls

 

1.1 继承:

一个类写了一个括号,带了个类名就表示是这个类的子类,继承这个类里面的特性

多态就是指子类的多种形态.

多态:

子类可以拥自己的方法

子类继承所有父类的方法

子类可以重写父类的方法

子类里的方法是最高等级的,如方法名相同会覆盖父类里的方法.这就是重写,是多态的一种

 

class Father:

    # def drink(self):

    #     print("father drinking")

 

    def smoke(self):

        print("father smoking")

 

    def earning(self):

        print("father earing 1000")

 

 

class Son1(Father):

    def drug(self):

        print("son1 method drug")

 

    def earning(self):

        print("son1 earing Nothing")

 

 

class Son1_wife:

    def cook(self):

        print("cooking meat")

 

    def drink(self):

        print("son1 wife drink double")

 

 

class Son2(Father):

    def song(self):

        print("son2 method song")

 

    def earning(self):

        print("son2 earning 2000")

 

 

class Gson(Son1, Son1_wife):

    def dance(self):

        pass

 

print("=======S1 info=========")

s1 = Son1()

s1.drug()

# s1.drink()

s1.earning()

print("=======S2 info=========")

s1 = Son2()

# s1.drink()

s1.earning()

s1.song()

print("======G1 info==========")

g1 = Gson()

g1.drink()

g1.drug()

g1.earning()

g1.dance()

 

#类初期了解,知道语法.半年后能自己写.

 

多继承:

深度优先:先找根,没有再找C

广度优先:先找C,没有再找根

技术图片

 

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

224 面向对象编程介绍,面向过程与面向对象

面向对象-面向对象和面向过程的区别

面向对象分析与设计面向对象设计包括哪些内容

面向对象

面向过程面向对象及面向对象的三大特征

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景)