python-面向对象(一)

目录

1. 面向对象由来

1.面向过程编程:定义变量,定义函数
    优点:复杂的问题流程化,进而简单化
    缺点:牵一发而动全身,扩展性差,可维护性差
    应用场景:对扩展性要求不高的地方
2.面向对象编程:定义一个类,类有属性(变量、特征),有方法(函数,技能)
		优点:扩展性强,可维护性强
    缺点:编程复杂度高
    应用场景:对扩展性要求较高的地方

2. 面向对象编程

1 面向过程变成的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么然后干什么
2 面向对象编程的核心是对象二字,对象是特征与技能的结合体,盛放数据和函数的容器

3. 类和对象

# 必须先定义类,然后调用类产生对象
# 定义了类 Person
class Person():  # 类名首字母一般情况大写,使用大驼峰法命名
    # 定义属性
    weight = 90
    height = 180
		
    # 定义技能(函数)
    def sleep1(self):
        print('睡觉')

'''
定义类:
        1. 立即执行类体代码
        2. 产生一个类的名称空间,把类体里面执行的名字都扔到名称空间中(大字典)
        3. 把类的名称空间绑定给__dict__, 类名.__dict__
'''
      
# 查看类的名称空间
print(Person.__dict__)  

# 调用类产生对象,默认产生的就是一个空对象{}
zhangsan = Person()  # 类的实例化,得到对象

# 使用对象
zhangsan.sleep1()  # 睡觉
print(zhangsan.height)  # 180

4. 定制对象独有特征

class Person():
    weight = 90
    height = 180

    def sleep1(self):
        print('睡觉')
zhangsan = Person()
zhangsan.city = 'BJ'  # 给shangsan对象定制独有的特征
print(zhangsan.city)  # BJ

5. __init__方法

# 对象在实例化的时候,赋初值(给对象一些属性)
# 老方法
class Student():
    def choose_course(self):
        print('选课')


s1 = Student()
s1.name = 'json'
s1.age = 18

print(s1.name)  # json

# __init__的使用
class Student():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def choose_course(self):
        print('选课')


s1 = Student('tom', 18)  # 这种初始化方式会触发类的__init__的执行,并把参数传入
print(s1.name)

6. 属性的查找顺序

# 属性的查找:先从自己的对象中查找,然后在去产生对象的类中取找
class Student():
    school = 'Harvard University'

    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.name = name
        self.age = age
        self.gender = gender
        self.course = course

    def choose_course(self, course):
        self.course.append(course)
        print('%s 选课成功 %s ' % (self.name, self.course))


s1 = Student('bob', 18, 'male')
print(s1.__dict__)  # {'name': 'bob', 'age': 18, 'gender': 'male', 'course': []}
s1.choose_course('python')  # bob 选课成功 ['python'] 
print(s1.__dict__)  # {'name': 'bob', 'age': 18, 'gender': 'male', 'course': ['python']}

'''
属性的查找:
	1. 类属性: 在类中写的属性就称为类属性
	2. 对象属性:在对象自己的名称空间中的属性就是对象属性
'''

# 1.类属性的查找
# 查
print(Student.school)

# 增
Student.country = 'USA'  # 后面实例化的新对象才会有
print(Student.country)

# 删
del Student.school
print(Student.__dict__)  # 删除了school属性

# 改
Student.school = 'Oxford'
print(Student.school)  # Oxford

# 2.对象的属性查找

# 查
print(s1.name)  # bob

# 增
s1.height = 180
print(s1.__dict__)  # 多了height

# 删
del s1.age
print(s1.__dict__)  # age 没有了

# 改
s1.name = 'tony'
print(s1.name)  # tony


# 判断对象是否是某个类实例化的

class Teacher():
    pass


print(isinstance(s1, Student))  # True
print(isinstance(s1, Teacher))  # False
上一篇:大家来看看这算不算抄袭?


下一篇:C++多线程5