弄懂这三个问题,你就明白什么是Python面向对象啦

    /    2018-09-10

问题一:什么样的代码才是面向对象?

答:从简单来说,如果程序中的所有功能都是用类和对象来实现,那么就是面向对象编程了。

问题二:函数式编程 和 面向对象 如何选择?分别在什么情况下使用?

答:须知:对于 C# 和 Java 程序员来说不存在这个问题,因为该两门语言只支持面向对象编程(不支持函数式编程)。而对于 Python 和 PHP 等语言却同时支持两种编程方式,且函数式编程能完成的操作,面向对象都可以实现;而面向对象的能完成的操作,函数式编程不行(函数式编程无法实现面向对象的封装功能)。

所以,一般在Python开发中,全部使用面向对象或面向对象和函数式混合使用

面向对象的应用场景:

1. 多函数需使用共同的值,如:数据库的增、删、改、查操作都需要连接数据库字符串、主机名、用户名和密码

class SqlHelper:
    def __init__(self, host, user, pwd):
        self.host = host
        self.user = user
        self.pwd = pwd
    def 增(self):
        # 使用主机名、用户名、密码(self.host 、self.user 、self.pwd)打开数据库连接
        # do something
        # 关闭数据库连接
    def 删(self):
        # 使用主机名、用户名、密码(self.host 、self.user 、self.pwd)打开数据库连接
        # do something
        # 关闭数据库连接
    def 改(self):
        # 使用主机名、用户名、密码(self.host 、self.user 、self.pwd)打开数据库连接
        # do something
        # 关闭数据库连接
    def 查(self):
        # 使用主机名、用户名、密码(self.host 、self.user 、self.pwd)打开数据库连接
        # do something
        # 关闭数据库连接# do something

2. 需要创建多个事物,每个事物属性个数相同,但是值的需求

如:张三、李四、杨五,他们都有姓名、年龄、血型,但其都是不相同。即:属性个数相同,但值不相同

class Person:
    def __init__(self, name ,age ,blood_type):
        self.name = name
        self.age = age
        self.blood_type = blood_type
    def detail(self):
        temp = "i am %s, age %s , blood type %s " % (self.name, self.age, 
self.blood_type)
        print temp
zhangsan = Person('张三', 18, 'A')
lisi = Person('李四', 73, 'AB')
yangwu = Person('杨五', 84, 'A')

问题三:类和对象在内存中是如何保存?

答:类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图:

如上图所示,根据类创建对象时,对象中除了封装name和age的值之外,还会保存一个类对象指针,该值指向当前对象的类。

当通过obj1执行 【方法一】时,过程如下:

1. 根据当前对象中的 类对象指针找到类中的方法

2. 将对象obj1当作参数传给方法的第一个参数 self

(16)

分享至