面向對象的屬性和方法

對象獨有的名稱空間: 在產生對象時就賦初值

class Student:
   def __init__(self, stu_name, sex):
       self.name = stu_name
       self.sex = sex  # 一般建議參數名與新增的屬性名同名

stu = Student('Bob', 'male')  # 實例化對象
print(stu.name, stu.sex)

'''
# __init__方法會在實例化對象時被調用
# 1.會爲實例化的對象造成空的名稱空間
# 2.就是一個方法,能夠被傳參,在 類名(實參) 這種方式下調用並傳參 __init__(self, 形參)
# 3.第一個self就是要產生的當前對象
# 重點:在方法內部,形參拿到了實參值,利用self.屬性名 = 形參 = 實參值,對對象的名稱空間添加屬性
'''

類中方法的第一個默認參數:對象方法

class A:
   # 對象方法
   def test(self, num):
       pass
a = A()

# 調用方法
# 二級優化
a.test(10)
# 一級優化
A.test(a, 10)
# 實現原理
A.__dict__['test'](a, 10)

# 總結:對象a傳遞給self,數字10傳遞給num
# 重點:方法的第一個參數必定是調用該方法的對象

類中@classmethod修飾的方法:類方法

class Tool:
   @classmethod
   def add(cls, n1, n2):  # 統一類與對象均可以調用類方法,必定有默認傳入第一個參數
       return n1 + n2
   
# 建議
Tool.add(10, 20)  # 默認第一個傳入自身 - Tool

# 不建議
tool = Tool()
tool.add(100, 200)   # 默認第一個傳入自身所屬類 - tool.__class__

屬性與方法的總結

class OldBoy:
   # 屬於類的屬性
   name = '老男孩'

   # 屬於對象的屬性
   def __init__(self, name):
       self.name = name

   # 屬於類的方法
   # 需求:獲取機構的名字
   @classmethod
   def get_class_name(cls):
       return cls.name

   # 屬於對象的方法
   # 需求:獲取校區的名字
   def get_school_name(self):
       return self.name

# 先建立校區
shanghai = OldBoy('上海校區')
shenzhen = OldBoy('深圳校區')

# 類方法的使用
# 建議使用類調用
print(OldBoy.get_class_name())
# 類方法拿對象調用並無多少新增的意義,不建議拿對象調用
print(shanghai.get_class_name())
print(shenzhen.get_class_name())

# 對象方法的使用
# 類調用對象方法,必須把要操做的對象手動傳入,不建議使用
print(OldBoy.get_school_name(shanghai))
print(OldBoy.get_school_name(shenzhen))
# 對象調用對象方法,默認將自身傳入,建議使用
print(shanghai.get_school_name())
print(shenzhen.get_school_name())

組合

# 組合:自定義類的對象做爲另一個類的屬性
class Teacher:
   def __init__(self, name, age):
       self.name = name
       self.age = age
t1 = Teacher("Ben", 17)

class Student:
   # 學生能夠有 老師 屬性
   def __init__(self, name, age, teacher):
       self.name = name
       self.age = age
       # 組合
       self.teacher = teacher
stu = Student('Bob', 18, t1)

# 訪問老師具體的信息
print(stu.teacher.name)
print(stu.teacher.age)

面向對象的三大特性

# 封裝:隱藏細節 - 抽離共有
# 繼承:
# 多態:
# 重點:
# 1.類的屬性如何定義,類的方法如何定義
# 2.對象的屬性如何定義,對象的方法如何定義
# 3.何時定義類方法與對象方法
相關文章
相關標籤/搜索