python:面向對象的基本知識

面向對象:

#類是現實世界或思維世界的實體在計算機中的反映  #它將數據以及這些數據上的操作封裝在一起    # 屬性-特徵    # 方法(函數)-行為      # 構造函數-__init__() 初始化類的特徵      構造函數是自動被調用的,也可顯式調用,但不能定義return值,只能返回None(一般不用)      作用:初始化類的特徵值,讓對象之間變的不同

1 類命名

# 首字母大寫;單詞之間大寫連接

2 構造函數(特殊的實例方法)

# 2.1 默認被調用;亦可被主動調用  # 2.2 只能返回None,它不是用來返回值的  # 2.3 作用:讓模板創建不同的對象,初始化對象的特性

3 屬性

# 類變量(用'='號賦值!!!) :Students.sum      #規範:通過方法修改類變量      # self.__class__.變量 訪問類變量  # 實例變量      # self.變量 定義實例變量  # __dict__ 內置函數(同__all__,定義import*的範圍):對象下所有變量的字典      # dict需在實例中調用,在類中不準確。

4 方法

# 4.1 實例方法      # self 顯勝於隱 相當於this,只和實例對象有關,和類無關          #訪問實例變量,要加self      # 訪問類變量 __class__ 指定的類 Student      # 不要操作與對象無關的變量,請用類方法    # 4.2 類方法 @classmethod裝飾器      # 在函數前加上一個@classmethod 將self改成cls      # 避免邏輯錯亂,不要用對象調用類方法      # 可以訪問類變量 cls.sum(實例方法:self.__class__.變量 )      # 調用:類.類方法() (不建議用對象調用類方法,不合邏輯)    # 4.3 靜態方法 @staticmethod,不推薦用此方法      # 在函數前加上一個@staticmethod      # 可以同時被 對象、類 調用      # 可以訪問類變量 Student.sum,和變量關聯性不大的方法時用

5 成員的可見性

# 只允許內部的方法操作變量,避免直接修改數據變量  # __ 前面加 雙下劃線 變量變成私有

6 繼承性

# 建議一個類單獨成一個文件  # super 指代父類 Python3.x 和 2.x 的一個區別是:3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx  # 子類調用父類 屬性、方法 時,優先使用super()

案例:

class Student():      sum=0      def __init__(self,name1,age):          self.name=name1          self.age=age          self.__score=0          print(self.name)            #在實例方法中不要操作與對象無關的變量,請用類方法          #self.__class__.sum+=1          #print((self.__class__.sum))          #2.2 return '只能返回None'        @classmethod      def plus_sum(cls):          cls.sum+=1          print('我們班有:',cls.sum)        @staticmethod      def add(x,y):          print('This is a static method')      def do_homework(self):          print('寫作業')        def marking(self,score):          self.__score=score          print(self.name+'同學本次成績是'+str(self.__score))    class people  #實例化  s1=Student('石敢當',20)  r1=s1.marking(98)    Student.plus_sum()  s1=Student('石當2',22)  Student.plus_sum()    #2.1 很少調用構造函數,只是證明可用  #a=s1.__init__()  # print(a)  # print(type(a))    #print(s1.name)  #print(s1.__dict__)  #print(Student.__dict__)    s1.do_homework()