1. 程式人生 > >python學習day11 面向對象編程 類和實例

python學習day11 面向對象編程 類和實例

ise erro 可變參 避免 form int 限制 code 這樣的

class Student(object):  #class後面緊接著是類名,即Student,類名通常是大寫開頭的單詞,緊接著是(object),表示該類是從哪個類繼承下來的.通常,如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類。
    def __init__(self,name,score):      #通過定義一個特殊的__init__方法,在創建實例的時候,就把類的name,score等屬性綁上去,__init__方法的第一個參數永遠是self,表示創建的實例本身,因此,在__init__方法內部,就可以把各種屬性綁定到self,因為self就指向創建的實例本身,除了self外,其他參數和函數的參數一致,仍然可以用默認參數、可變參數、關鍵字參數和命名關鍵字參數。
self.name = name self.score = score def print_score(self): #在Student類的內部定義訪問數據的函數,這樣,就把“數據”給封裝起來了。這些封裝數據的函數是和Student類本身是關聯起來的,我們稱之為類的方法,要定義一個方法,除了第一個參數是self外,其他和普通函數一樣。要調用一個方法,只需要在實例變量上直接調用,除了self不用傳遞,其他參數正常傳入. print("%s:%s" % (self.name,self.score)) def get_grade(self): #
封裝的另一個好處是可以給Student類增加新的方法,比如get_grade,同樣的,get_grade方法可以直接在實例變量上調用,不需要知道內部實現細節 if self.score >= 90: return "A" elif self.score >= 60: return "B" else: return "C" bar = Student("Bart Simpson",59) bar.print_score() ret = bar.get_grade() print
(ret) lisa = Student("Lisa Simpson",87) lisa.age = 18 print(dir(lisa)) #使用dir()來查看類(或者是變量)可以使用的方法,可以看到Lisa實例比bar實例多了個age方法,這是因為我們的lisa.age = 18語句給lisa添加了新屬性age.和靜態語言不同,Python允許對實例變量綁定任何數據,也就是說,對於兩個實例變量,雖然它們都是同一個類的不同實例,但擁有的變量名稱都可能不同. #[‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘age‘, ‘get_grade‘, ‘name‘, ‘print_score‘, ‘score‘] print(dir(bar)) #[‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘get_grade‘, ‘name‘, ‘print_score‘, ‘score‘]

#********************************************訪問限制**********************************
#在Python中,變量名類似__xxx__的,也就是以雙下劃線開頭,並且以雙下劃線結尾的,是特殊變量,特殊變量是可以直接訪問的,不是private變量
#有時候會看到單下劃線開頭的變量,比如_name,這樣的實例變量外部是可以訪問的,但是,按照約定俗成的規定,當你看到這樣的變量時,意思就是,“雖然我可以被訪問,但是,請把我視為私有變量,不要隨意訪問”
#雙下劃線開頭的實例變量一般是不能直接從外部訪問的,但是也不是一定不能從外部訪問呢。不能直接訪問__name是因為Python解釋器對外把__name變量改成了_Student__name,所以,仍然可以通過_Student__name來訪問__name變量,但是強烈建議你不要這麽幹,因為不同版本的Python解釋器可能會把__name改成不同的變量名
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 set_score(self, score):     #通過內部方法來在類內部修改__score   #在方法中,可以對參數做檢查,避免傳入無效的參數:
        if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError(bad score)
bart = Student("Bart simpson",59)
bart.print_score()
#Bart simpson:59
bart.set_score(89)
bart.print_score()
#Bart simpson:89

python學習day11 面向對象編程 類和實例