1 問題描述
爲了統計學生人數,可以給Student類增加一個類屬性,每創建一個實例,該屬性自動增加:
class Student(object):
count = 0
def __init__(self, name):
self.name = name
Student.count += 1
stu1 = Student('小剛', 18)
2 解題提示
本題主要是對類實例,類屬性,類方法的認識
- 參考本模塊第一節 類和實例、訪問限制、屬性和方法、成員屬性和類屬性
- 定義一個變量用來計數,每添加一個實例,就讓這個變量 +1
- 查看這個屬性(類名.屬性名)
3 評分標準
- 本題共計30分
- 實現count數的增加20分
- 代碼註釋、規範10分
4 要點解析
4.1 命名規則
# # 類名的書寫規範,建議使用駝峯命名法
# 大駝峯:MyCar XiaoMi
class MyCart():
pass
# 小駝峯:myCar xiaoMi
class myCart():
pass
# # 如果只是用一個詞來命名,首字母要大寫
class Cart():
pass
4.2 面向對象、面向過程
面向對象編程——Object Oriented Programming,簡稱
OOP
,是一種以對象爲中心的程序設計思想。面向過程編程——Procedure Oriented Programming,簡稱
POP
,是一種以過程爲中心的程序設計思想。
分析問題中需要的抽象模型,然後將需要的功能分別去創建模型對象,最終由模型對象來完成程序
優缺點:
分析解決問題的步驟,然後一步步去實現
優缺點:
- 優點: 將負責的問題流程化,進而實現簡答化
- 缺點:擴展性差(更新,維護,迭代)
4.3 類
類 :對一類事物的描述,是抽象的、概念上的定義。
# 創建類,類主要由類名,屬性,方法組成,當然創建一個類時,屬性和方法可以選擇的。
class Person:
count = 1
def speak(self):
print("I can speak")
# 創建對象
tom =Person() #創建對象,直接類名()
tom.speak()
4.4 類屬性,實例屬性
- 定義的位置不同,類屬性直接定義在類中,對象屬性定義在構造函數中
- 訪問方式不同,類屬性使用類名直接訪問,對象屬性使用對象訪問
class Student(object):
#類屬性直接定義在類中
count = 0
def __init__(self,name):
#實例【對象】屬性定義在構造函數中
self.name = name
# 查看類屬性
print(Student.count)
# 創建實例【對象】
xm = Student('小明')
# 通過創建的對象來訪問對象屬性
print(xm.name)
4.5 self
-
self只有在類的方法中才會有,獨立的函數或方法是不必帶有self的。
-
self在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。
-
self指的是類實例對象本身,不是類本身。
4.6 有object與無object
在python2中,class(object)定義時,class繼承了object()的屬性;
在python3中,class()默認繼承了object()
class A:
"""
不帶object
"""
name = "zhengtong"
class B(object):
"""
帶有object
"""
name = "chonghong"
if __name__ == "__main__":
a = Person()
print("A", dir(a))
b = B()
print("B", dir(b))
5 代碼實現
# 創建一個學生類
class Student(object):
#類屬性直接定義在類中
count = 0
def __init__(self,name):
# 實例【對象】屬性定義在構造函數中
self.name = name
# 每次創建一個對象,類屬性的count+1
Student.count += 1
# 查看類屬性
print(Student.count)
# 創建實例【對象】
xm = Student('小明')
# 通過創建的對象來訪問對象屬性
print(xm.name)
# 創建一個對象之後,再次查看類屬性
print(Student.count)