学习笔记(7):第二章 程序设计与数据结构-万物皆对象,Python不例外 3

立即学习:https://edu.csdn.net/course/play/25504/304699?utm_source=blogtoedu

# 面向过程
stu1 = {"name": "xiaohong", "score": 98}
stu2 = {"name": "xiaobai", "score": 80}

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

# 面向对象
# 设计类
# 属性和方法
# 继承自object基类(Python3)
class Student(object):
    # 方法
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_score(self):
        print("%s :%s" % (self.name, self.score))

# 实例化对象xiaohong
xiaohong = Student('xiaohong', 98)
xiaohong.print_score()

# 也可直接访问对象属性
print("%s :%s" % (xiaohong.name, xiaohong.score))

# 每个对象被实例化后会有一个独立的内存空间
# 查看对象内存地址
print(id(xiaohong))

'''
    继承,封装,多态
'''
class Student(object):
    # 方法
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_score(self):
        print("%s :%s" % (self.name, self.score))

    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

# 这里对象xiaolv调用了第二个Student,可以理解为同名类后定义的会覆盖先定义的
xiaolv = Student("xiaolv", 45)
print(xiaolv.get_grade())

# __代表私有
class Student(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
    def print_score(self):
        print("%s: %s" % (self.__name, self.__score))
    def get_grade(self):
        if self.__score >= 90:
            return 'A'
        elif self.__score >=60:
            return 'B'
        else:
            return 'C'
    def get_score(self):
        return self.__score
    def set_score(self, score):
        if 0<=score<=100:
            self.__score = score
        else:
            raise ValueError("不符合规范的输入")

xiaobai = Student("xiaobai", 70)
print(xiaobai.get_score())

# 但是python没有真正的私有,只是变量名被改为_Student__name,依然可以访问
print(xiaobai._Student__name)

# 实例属性 必须通过初始化或实例化对象,通过对象去访问
class Student(object):
    def __init__(self, name):
        self.name = name
s = Student('Bob')
print(s.name)

# 类属性 不需要实例化对象,直接通过类名访问
class Student(object):
    name = 'Student'

# 实例化对象修改类属性,只会改变当前对象的类属性;通过类修改类属性,全部该类的对象都会改变类属性
a = Student()
b = Student()
Student.name = '2'
a.name = '1'
print(a.name)
print(b.name)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章