學習筆記(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)

 

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