Define Class
class Employee:
raise_amt = 1.04 # 實參:無需在創(chuàng)建對象時傳遞
# self會自動向下傳遞,無需在創(chuàng)建類的時候進行傳遞;而first, last, pay需在創(chuàng)建對象時進行傳遞搭盾;
def __init__(self, first, last, pay): # 均為形參
self.first = first
self.last = last
self.email = first + '.' + last + '@email.com'
self.pay = pay
# 字符串的format函數(shù)可以接受不限個參數(shù)顽分,位置可以不按順序,可以不用或者用多次;
def fullname(self):
return '{} {}'.format(self.first, self.last)
def apply_raise(self):
self.pay = int(self.pay + self.raise_amt)
return self.pay
根據類來創(chuàng)建對象
emp_1 = Employee('Corey', 'Schafer', 50000)
1. 調用類中的方法
Employee.fullname(emp_1)
Employee.apply_raise(emp_1)
2. 調用類的屬性:通用屬性
emp_1.raise_amt
emp_1.first
3. 修改屬性的值
method 1: 直接修改
emp_1.raise_amt
emp_1.raise_amt=2
emp_1.raise_amt
method 2: 通過方法修改屬性的值
class Employee:
raise_amt = 1.04 # 實參:無需在創(chuàng)建對象時傳遞
# self會自動向下傳遞嬉挡,無需在創(chuàng)建類的時候進行傳遞;而first, last, pay需在創(chuàng)建對象時進行傳遞;
def __init__(self, first, last, pay): # 均為形參
self.first = first
self.last = last
self.email = first + '.' + last + '@email.com'
self.pay = pay
# 字符串的format函數(shù)可以接受不限個參數(shù)邓了,位置可以不按順序,可以不用或者用多次;
def fullname(self):
return '{} {}'.format(self.first, self.last)
def apply_raise(self):
self.pay = int(self.pay + self.raise_amt)
return self.pay
def update_raise_amt(self,new):
self.raise_amt = new
emp_1 = Employee('Corey', 'Schafer', 50000)
emp_1.raise_amt
emp_1.update_raise_amt(2)
emp_1.raise_amt
繼承
一個類繼承另外一個類時媳瞪,將自動獲得另一個類的所有屬性與方法骗炉,還可以定義自己的屬性與方法, 原來的類為父類蛇受,新的類為子類句葵;
For example: Employee是父類,在()內定義who是父類:
super()是一個特殊的函數(shù),幫助Python將父類與子類關聯(lián)起來龙巨, 這個函數(shù)讓Python調用Son的父類的方法init(),讓Son實例包含父親的所有屬性笼呆。
1. 給子類定義屬性和方法
class Son(Employee):
# __init__里super()函數(shù)將父類與子類關聯(lián)起來,調用父類的__init__()
def __init__(self, first, last, pay):
super().__init__(first, last, pay)
self.sex = "F" # 子類特有的屬性
# 定義子類的方法
def add(self,age):
return 'Age: '+age
new = Son("a","c",200)
調用子類中的方法
new.add('28')
2. 重寫父類中的方法:當父類中方法不符合子類時旨别,可以在子類中用和父類相同的函數(shù)名對父類中的函數(shù)進行重寫
class Son(Employee):
# __init__里super()函數(shù)將父類與子類關聯(lián)起來诗赌,調用父類的__init__()
def __init__(self, first, last, pay):
super().__init__(first, last, pay)
self.sex = "F" # 子類特有的屬性
# 定義子類的方法
def add(self,age):
return 'Age: '+age
# 重寫父類中的函數(shù)fullname
def fullname(self):
return "{}-{}".format(self.last, self.first)
new = Son('Corey', 'Schafer', 50000)
Son.fullname(new)
new.add("90")
- 若沒有額外的傳遞參數(shù)(即:除self之外,沒有其他形參)秸弛,則Son.fullname(new),類名.函數(shù)名(實例)铭若;
- 若有額外的形參,則不需要寫類名递览,實例.函數(shù)名(傳遞形參)叼屠。
3. 將實例作為屬性
當對類添加的細節(jié)過多時,可以將具體的一些細節(jié)分離出來绞铃,形成實例的類镜雨,然后可以在類中將實例作為屬性
# 實例
class Lina():
def __init__(self, name= 'Lulu'):
self.name = name
def nickname(self):
print("The nickname of Lina is Lulu")
class Son(Employee):
# __init__里super()函數(shù)將父類與子類關聯(lián)起來,調用父類的__init__()
def __init__(self, first, last, pay):
super().__init__(first, last, pay)
self.sex = "F" # 子類特有的屬性
self.nickname = Lina() # 以實例為屬性
# 定義子類的方法
def add(self,age):
return 'Age: '+age
new = Son('Corey', 'Schafer', 50000)
new.nickname.nickname() # 調用實例中的詳細描述儿捧,即方法
導入荚坞、調用類
%run employee.ipynb
emp_1 = Employee('Corey', 'Schafer', 50000)
emp_1.raise_amt