面向對象:
#類是現實世界或思惟世界的實體在計算機中的反映
#它將數據以及這些數據上的操做封裝在一塊兒
# 屬性-特徵
# 方法(函數)-行爲
# 構造函數-__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()