python特训营第二章-面向对象编程

课程目标

  1. 面向对象编程
  2. 类和实例
  3. 访问限制
  4. 实例属性和类属性

面向对象编程
• 面向对象编程是一种程序设计思想
• 面向对象把类和对象作为程序的基本单元
• 对象包含属性和方法
• 面向过程编程为:函数的调用集合
• 面向对象编程为:对象之间传递信息的集合
• 处处皆对象

类和实例
• 类可以理解为图纸或者模版
• 实例是根据类的图纸或者模版创建出来的一个一个对象
• 类定义class,关键字self
• 类的初始化函数__init__
• 面向对象三大特点:继承,封装,多态
• 属性和方法


```python
# 面向过程

stu = {'name': 'chen','score':'82'}
stu2 = {'name':'shd','score':'87'}

def print_score(stu):
    print('%s : %s' %(stu['name'],stu['score']))

# 面向对象
# 1。设计类
# 属性和方法
# 把学生设计成一个抽象的类

class Student(object):
    # pass #没想好怎么设计可以pass占位
    #类内部的函数叫方法
    #self 指向创建的实例的本身
    def __init__(self,name,score): #self 默认的参数  name,score从外部传入
        self.name = name
        self.score = score

    def print_score(slfe):
        print('%s : %s' % (slfe.name,slfe.score))
#xiaohon 实例化对象1
xiaohon = Student('xiaohong',98)
#xiaoba 实例化对象2
xiaoba = Student('xiaoba',81)

xiaohon.print_score()


'''
    继承,封装,多态
'''


class Student(object):
    # pass #没想好怎么设计可以pass占位
    #类内部的函数叫方法
    #self 指向创建的实例的本身
    def __init__(self,name,score): #self 默认的参数  name,score从外部传入
        self.name = name
        self.score = score

    def print_score(slfe):
        print('%s : %s' % (slfe.name,slfe.score))

    def get_grade(self): #slfe的属性已经绑定了所以不用再传入
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'
xiaolv = Student('xiaolv',45)
print(xiaolv.get_grade())

'''
    访问限制
'''
#成绩不希望被修改,所以需要访问限制
xiaolv.score =90
print(xiaolv.get_grade())


#前面加两个下划线可以私有化

class Student(object):
    # pass #没想好怎么设计可以pass占位
    #类内部的函数叫方法
    #self 指向创建的实例的本身
    def __init__(self,name,score): #self 默认的参数  name,score从外部传入
        self.__name = name
        self.__score = score

    def print_score(slfe):
        print('%s : %s' % (slfe.__name,slfe.__score))

    def get_grade(self): #slfe的属性已经绑定了所以不用再传入
        if self.__score >= 90:
            return 'A'
        elif self.__score >= 60:
            return 'B'
        else:
            return 'C'
    #如果想被修改的话
    def set_socre(self,score):
        # return self.__score
        # #数据过滤
        if 0 <= score <=100:
            self.__score = score
        else:
            raise ValueError('分数请大于0小于等于100')
    #需要用方法来获取score
    def get_score(self):
        return self.__score

xiaolv = Student('xiaolv',45)

print(xiaolv.set_socre(90))
print(xiaolv.get_score())


#python没有真正的是私有,把私有改名称_Student__name
print(xiaolv._Student__name)

#建议把属性都设置成私有的


'''
    类属性
'''

#实例属性 必须通过初始化或实例化对象,通过对象去访问
class Student(object):
    def __init__(self, name):
        self.name = name
s = Student('Bob')
s.name = 90
# • 类属性  不需要实例化对象的,直接可以通过类名访问
class Student(object):
    name = 'Student'
print(Student.name)

```python
在这里插入代码片


小结

• 面向过程和面向对象编程
• 类由属性和方法组成
• 对象是类的实例化
• 属性可以封装,并声明私有属性
• 类属性和实例属性

作业

请把下面的Student对象的gender字段对外隐藏起来,用
get_gender()和set_gender()代替,并检查参数有效性:
class Student(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender

```python

```python
class Student(object):
    def __init__(self,name,gender):
        self.__name = name
        self.__gender = gender

    def get_gender(self):
        return self.__gender

    def set_gender(self,gender):
        if gender == 'male':
            self.__gender = gender
        elif gender == 'female':
            self.__gender = gender
        else:
            raise ValueError('please set male or female')

alex = Student('alex','male')
print(alex.set_gender('goose'))
print(alex.get_gender())

猜你喜欢

转载自blog.csdn.net/weixin_42873348/article/details/107568547