迭代器和生成器
生成器:
a.可以看成是一個可以存儲多個數(shù)據(jù)的容器.需要里面數(shù)據(jù)的時候就生成一個,里面的數(shù)據(jù)只能從前往后依次生成,不能跳躍,不能從后往前.生成后的數(shù)據(jù)不能再生成
b.獲取生成器中的數(shù)據(jù)用._next_()方法
c.函數(shù)聲明中有yield關(guān)鍵字,函數(shù)就變成一個生成器
和列表比較:列表存數(shù)據(jù),數(shù)據(jù)必須是實實在在的的數(shù)據(jù),一個數(shù)據(jù)會占一定的內(nèi)存空間
生成器存數(shù)據(jù),存的是產(chǎn)生數(shù)據(jù)的算法,沒有數(shù)據(jù)占內(nèi)存空間
def Fibonacci(n):
'''
'''
n1 = 1
n2 = 1
for x in range(1, n + 1):
if x == 1 or x == 2:
current = 1
yield current
continue
current = n1 + n2
n1, n2 = n2, current
yield current
def main():
'''
生成器:
a.可以看成是一個可以存儲多個數(shù)據(jù)的容器.需要里面數(shù)據(jù)的時候就生成一個,里面的數(shù)據(jù)只能從前往后依次生成,不能跳躍,不能從后往前.生成后的數(shù)據(jù)不能再生成
b.獲取生成器中的數(shù)據(jù)用.__next__()方法
c.函數(shù)聲明中有yield關(guān)鍵字,函數(shù)就變成一個生成器
和列表比較:列表存數(shù)據(jù),數(shù)據(jù)必須是實實在在的的數(shù)據(jù),一個數(shù)據(jù)會占一定的內(nèi)存空間
生成器存數(shù)據(jù),存的是產(chǎn)生數(shù)據(jù)的算法,沒有數(shù)據(jù)占內(nèi)存空間
'''
x = (i for i in range(10))
# x就是一個生成器,用來產(chǎn)生數(shù)據(jù)
print(x)
print(x.__next__()) # 獲取生成器里面的數(shù)據(jù)(只能獲取一個數(shù)據(jù))
print(x.__next__())
print(x.__next__())
print(x.__next__()) # 用完之后再調(diào)用__next__()會報StopIteration錯誤
x = Fibonacci(10)
print(x.__next__())
print(x.__next__())
print(x.__next__())
print(x.__next__())
print(x.__next__())
if __name__ == '__main__':
main()
面向?qū)ο?/h1>
-
1.什么是類:對擁有同一屬性和方法的對象的封裝
類是抽象的
類中的相同屬性是不能確定的
-
2.什么是對象:對象就是類的實例
對象是具體的
對象的屬性是確定的
-
3.面向?qū)ο缶幊?/p>
面向過程編程:一步一步寫代碼實現(xiàn)功能→工具:邏輯和算法
函數(shù)式編程:面對問題考慮有沒有擁有某種功能函數(shù)→工具:函數(shù)
面向?qū)ο缶幊?面對問題考慮有沒有相應(yīng)的對象來解決→工具:類和對象
類的聲明
類的聲明:
class 類名(父類):
屬性
方法
- class:python中聲明類的關(guān)鍵字
- 類名:標(biāo)識符,首字母大寫,駝峰式命名
- (父類):類繼承自其他的類,要寫括號,括號里面是父類命,可省略
- 屬性:對象屬性和類的字段 → 保存數(shù)據(jù)
- 方法:實質(zhì)就是聲明在類中的函數(shù) → 實現(xiàn)功能
- 聲明兩個對象方法,需要使用對象來調(diào)用
- 對象方法默認(rèn)有一個self參數(shù),調(diào)用的時候系統(tǒng)會自動傳參數(shù)
- 誰調(diào)用這個方法,self就是誰
class Person:
'''類的說明'''
# 聲明兩個對象方法,需要使用對象來調(diào)用
# 對象方法默認(rèn)有一個self參數(shù),調(diào)用的時候系統(tǒng)會自動傳參數(shù)
# 誰調(diào)用這個方法,self就是誰
def eat(self):
print(self)
print('吃飯呢!!!')
def sleep(self):
print(self)
print('睡覺呢!!!')
聲明對象
- 通過類的構(gòu)造方法取創(chuàng)建對象(系統(tǒng)自動生成的和類名相同的方法)
對象名 = 類名()
- 類的對象可以通過.語法使用類中聲名的方法和屬性
方式:對象.方法()/對象.屬性
if __name__ == '__main__':
# 聲明對象
p1 = Person()
print(p1)
p1.eat()
# 一個類可以有多個對象
p2 = Person()
# 對象可以調(diào)用對象方法
print(p2)
p2.sleep()
對象的屬性
聲明對象屬性
class 類名:
def __init__(self):
self.屬性名 = 初值
self.屬性名2 = 初值2
self.屬性名3 = 初值3
class Person:
'''人類'''
-
init系統(tǒng)自帶的方法,不能直接調(diào)用,通過類創(chuàng)建對象的時候系統(tǒng)會自動調(diào)用的方法
-
init方法的作用是對對象的屬性進(jìn)行初始化
- 通過構(gòu)造方法船艦對象的時候,一定要保證init方法中除了self以外,其他每個參數(shù)都有值
def __init__(self, name='', age=0, gender='Female'):
# 聲明對象的屬性
print('++++++++')
'''
name,age,gender就是person類的對象屬性,只能通過對象調(diào)用
'''
self.name = name
self.age = age
self.gender = gender
self.height = 191
if __name__ == '__main__':
# 注意構(gòu)造方法中的參數(shù)是直接傳給init方法的參數(shù)的
p1 = Person('Shin', 21, 'Male')
print(p1.name)
print(p1.age)
print(p1.height)
p2 = Person('Kris', 18, 'Male')
print(p2.name, p2.age, p2.gender, p2.height)
p2 = Person('doge')
p5 = Person(gender='male')
對象屬性的增刪查改
class Dog:
'''狗類'''
def __init__(self, age=1, color='red'):
self.age = age
self.color = color
def mian():
d1 = Dog(0, 'white')
- 1.查屬性:對象.屬性(屬性不存在會報錯)
- 對象.getattribute(屬性名)/getattr(對象,屬性名str,默認(rèn)值(不存在返回默認(rèn)值,有默認(rèn)值則不報錯))
print(d1.age, d1.color)
print(d1.__getattribute__('age'))
print(getattr(d1, 'age'))
- 2.改屬性值:對象.屬性 = 新值
- 對象.setattr('屬性名','值')
- setattr(對象,屬性名,新值)
d1.age = 4
print(d1.age)
d1.__setattr__('color', 'brown')
setattr(d1, 'age', 10)
- 3.增加屬性:對象.屬性 = 值(屬性不存在)
- 注意屬性是添加給對象的,不是給類
d1.name = '狗哥'
print(d1.name)
d1.__setattr__('type', '金毛')
setattr(d1, 'gender', '雄')
- 4.刪除對象屬性:del 對象.屬性
- 注意:刪除的是對象的屬性,不影響這個類的其他對象
- 對象.delattr(屬性名)/delattr(對象,屬性名)
del d1.color
# print(d1.color)
d1.__delattr__('name')
delattr(d1, 'gender')
class Student:
def __init__(self, name='', age=18, gender='male'):
self.name = name
self.age = age
self.gender = gender
def study(self):
print('%s學(xué)習(xí)呢!!!' % self.name)
case: 聲明學(xué)生類,有屬性:姓名,性別,年齡 方法:學(xué)習(xí)
1.聲明學(xué)生類的對象,聲明的時候給姓名,性別和年齡賦值
2.通過三種方式分別獲取姓名,性別,年齡并打印
3.給學(xué)生對象添加一個電話屬性
4.修改學(xué)生的年齡
5.刪除學(xué)生性別
stu1 = Student('周潤發(fā)', 20, 'Male')
print(stu1.name, stu1.__getattribute__('age'), getattr(stu1, 'gender', None))
setattr(stu1, 'tel', '123321123')
stu1.__setattr__('age', '40')
stu1.__delattr__('gender')
stu1.study()
if __name__ == '__main__':
mian()
slots魔法
class Person:
slots的功能:就是約束類中對象的屬性.
__slots__ = ('name', 'age', 'height', 'id')
def __init__(self, name='', age=0):
self.name = name
self.age = age
# 自定義對象的打印格式
# id():python內(nèi)置函數(shù),功能是獲取變量地址
def __str__(self):
return self.name + ',' + str(self.age)
def main():
p1 = Person('王根基', 15)
p1.name = '小三'
p1.height = 177
print(p1)
if __name__ == '__main__':
main()
類中的方法
屬性:對象的屬性,類的字段(屬性)
對象屬性:屬于對象的,不同對象對應(yīng)的值可能不一樣(對象屬性,通過對象使用)
類的字段:聲明在類里面 函數(shù)外面 類屬性屬于類(類的字段,通過類使用)
方法:對象方法(方法),類方法,靜態(tài)方法
對象方法:自帶一個self參數(shù),一般要通過對象去調(diào)用
-
類方法:
1.使用@classmethod修飾
2.自帶一個cls參數(shù),不傳參,誰調(diào)用就指向誰
-
靜態(tài)方法:
1.使用@staticmethod修飾函數(shù)
2.沒有默認(rèn)參數(shù)
3.只能通過類來調(diào)用
怎么選擇用對象方法,類方法,靜態(tài)方法?
- 如果實現(xiàn)函數(shù)功能需要使用對象屬性就聲明對象方法
- 如果實現(xiàn)函數(shù)功能需要使用類的字段或者調(diào)用類方法就聲明類方法
- 都不需要就聲明靜態(tài)方法
class Person:
# number是類字段
number = 0
def __init__(self, name='', age=1):
self.name = name
self.age = age
# eat 方法是對象方法
def eat(self, food):
print('%s吃%s' % (self.name, food))
@classmethod
def ruinEarth(cls):
# cls指向調(diào)用這個方法的類,cls可以當(dāng)作類來用
p2 = cls('z3') # 可以使用cls創(chuàng)建對象
print(p2.name)
print(cls.number) # 可以通過cls使用類的自段
print('魂淡')
# 使用@staticmethod修飾靜態(tài)方法,沒有默認(rèn)參數(shù)
@staticmethod
def saveWater():
print('節(jié)約用水')
def main():
# 類的字段要用類來使用
print(Person.number)
# 對象的屬性要通過對象來使用
p1 = Person('根基')
print(p1.name)
p1.eat('人')
# 類方法通過類來調(diào)用
Person.ruinEarth()
# 靜態(tài)方法通過類來調(diào)用
Person.saveWater()
case1:班級類,屬性:班級名,學(xué)生,功能添加學(xué)生,查找學(xué)生
case2:一個類,封裝所有和數(shù)學(xué)運算相關(guān)的功能
class Student:
def __init__(self, name='', age=10):
self.name = name
self.age = age
def __str__(self):
return 'name:'+str(self.name)+' age:'+str(self.age)
class ClassA:
def __init__(self, name='', students=None):
self.name = name
self.students = students
def addStudent(self):
stu = Student('渣渣輝', 18)
self.students.append(stu)
print('增加一個學(xué)生')
def searcherStudent(self):
for stu in self.students:
print(stu)
def __str__(self):
return str(self.name)+str(self.students)
class mathMethod:
def plus(self, x, y):
return x + y
def sub(self, x, y):
return x - y
def mul(self, x, y):
return x * y
def div(self, x, y):
return x / y
cls1 = ClassA('py1805', [])
cls1.addStudent()
print(cls1.students[0])
if __name__ == '__main__':
main()
作業(yè)
-
1.聲明一個電腦類:
屬性:品牌、顏色、內(nèi)存大小
方法:打游戲、寫代碼、看視頻
a.創(chuàng)建電腦類的對象,然后通過對象點的方式獲取、修改、添加和刪除它的屬性
b.通過attr相關(guān)方法去獲取、修改、添加和刪除它的屬性
'''
@Author: Kris Shin
@Date: 2018-07-31 19:00:25
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:00:25
1.聲明一個電腦類:
屬性:品牌、顏色、內(nèi)存大小
方法:打游戲、寫代碼、看視頻
a.創(chuàng)建電腦類的對象,然后通過對象點的方式獲取、修改、添加和刪除它的屬性
b.通過attr相關(guān)方法去獲取、修改、添加和刪除它的屬性
'''
class Computer:
def __init__(self, brand='', color='', memory=1):
self.brand = brand
self.color = color
self.memory = memory
def playGame(self):
print('%s can playing game' % self.brand)
def typeCodes(self):
print('%s can typing code' % self.brand)
def watchVideo(self):
print('%s can watching video' % self.brand)
def main():
# 創(chuàng)建對象
cpt1 = Computer('God of war', 'black', 8)
# 點語句獲取值
print(cpt1.brand, cpt1.color, cpt1.memory)
# 增加屬性
cpt1.fans = 3
print(cpt1.fans)
# 修改屬性
cpt1.memory = 32
print(cpt1.memory)
# 刪除屬性
del cpt1.fans
# print(cpt1.fans) # 報錯computer對象沒有fans屬性
cpt2 = Computer('Dell', 'sliver', 4)
# getattr相關(guān)方法
print(cpt2.__getattribute__('brand'))
print(cpt2.__getattribute__('color'))
print(getattr(cpt2, 'memory'))
# setattr相關(guān)方法
cpt2.__setattr__('fans', 2)
print(cpt2.__getattribute__('fans'))
# delattr 相關(guān)方法
delattr(cpt2, 'fans')
# print(getattr(cpt2,'fans')) # 報錯computer對象沒有fans屬性
setattr(cpt2, 'color', 'white')
print(cpt2.__getattribute__('color'))
if __name__ == '__main__':
main()
- 2.聲明一個人的類和狗的類:
狗的屬性:名字、顏色、年齡 狗的方法:叫喚
人的屬性:名字、年齡、狗 人的方法:遛狗
a.創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃
'''
@Author: Kris Shin
@Date: 2018-07-31 19:20:53
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:20:53
2.聲明一個人的類和狗的類:
狗的屬性:名字、顏色、年齡 狗的方法:叫喚
人的屬性:名字、年齡、狗 人的方法:遛狗
a.創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃
'''
class Dog(object):
def __init__(self, name='', age=1, color=''):
self.name = name
self.age = age
self.color = color
def woof(self):
print('%s is woofing' % self.name)
class Person(object):
def __init__(self, name='', age=0, dog=Dog()):
self.name = name
self.age = age
self.dog = dog
def playWithDog(self):
print('%s is playing with %s' % (self.name, self.dog.name))
def main():
huang = Dog('大黃', color='brown')
ming = Person('小明', 23, huang)
ming.playWithDog()
if __name__ == '__main__':
main()
- 3.聲明一個矩形類:
屬性:長、寬 方法:計算周長和面積
a.創(chuàng)建不同的矩形,并且打印其周長和面積
'''
@Author: Kris Shin
@Date: 2018-07-31 19:32:19
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:32:19
3.聲明一個矩形類:
屬性:長、寬 方法:計算周長和面積
a.創(chuàng)建不同的矩形,并且打印其周長和面積
'''
class Rect(object):
def __init__(self, width=0, height=0):
self.width = width
self.height = height
print('width:' + str(width) + ' height:' + str(height))
def getArea(self):
return str(self.width * self.height)
def gerCLength(self):
return str(2 * (self.height + self.width))
def main():
rt1 = Rect(5, 6)
rt2 = Rect(12, 19)
rt3 = Rect(3.1415, 15.9876)
rt4 = Rect(2, 6)
rt5 = Rect(4, 4)
print('rect1 area:' + rt1.getArea() + ' girth:' + rt1.gerCLength())
print('rect2 area:' + rt2.getArea() + ' girth:' + rt2.gerCLength())
print('rect3 area:' + rt3.getArea() + ' girth:' + rt3.gerCLength())
print('rect4 area:' + rt4.getArea() + ' girth:' + rt4.gerCLength())
print('rect5 area:' + rt5.getArea() + ' girth:' + rt5.gerCLength())
if __name__ == '__main__':
main()
- 4.創(chuàng)建一個學(xué)生類:
屬性:姓名,年齡,學(xué)號 方法:答到,展示學(xué)生信息
創(chuàng)建一個班級類:
屬性:學(xué)生,班級名 方法:添加學(xué)生,刪除學(xué)生,點名
'''
@Author: Kris Shin
@Date: 2018-07-31 19:42:49
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:42:49
4.創(chuàng)建一個學(xué)生類:
屬性:姓名,年齡,學(xué)號 方法:答到,展示學(xué)生信息
創(chuàng)建一個班級類:
屬性:學(xué)生,班級名 方法:添加學(xué)生,刪除學(xué)生,點名
'''
class Student(object):
def __init__(self, name='', age=0, id=''):
self.name = name
self.age = age
self.id = id
def arriveAt(self):
print(
'%s %s %d %s is here!!' % (self.id, self.name, self.age, self.id))
class Class(object):
def __init__(self, name='', students=[]):
self.name = name
self.students = students
def addStu(self, stu=Student()):
self.students.append(stu)
print('add a student %s !!' % stu.name)
def delStu(self, stu):
self.students.remove(stu)
print('del a student %s !!' % stu.name)
def getStu(self):
for i in range(len(self.students)):
self.students[i].arriveAt()
def main():
stu1 = Student(name='aaa', id='001', age=18)
stu2 = Student('bbb', 20, '002')
cls = Class("lala", [stu1])
cls.addStu(stu2)
stu3 = Student('liupi', 50, '003')
cls.addStu(stu3)
cls.delStu(stu1)
cls.getStu()
if __name__ == '__main__':
main()
- 5.寫一個類,封裝所有和數(shù)學(xué)運算相關(guān)的功能(包含常用功能和常用值,例如:pi,e等)
'''
@Author: Kris Shin
@Date: 2018-07-31 20:06:47
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 20:06:47
5.寫一個類,封裝所有和數(shù)學(xué)運算相關(guān)的功能(包含常用功能和常用值,例如:pi,e等)
'''
class MathMethod(object):
e = 2.71
pi = 3.14
@staticmethod
def addNums(*nums):
rt = 0
for i in range(len(nums)):
rt += nums[i]
return rt
@staticmethod
def subNums(*nums):
rt = nums[0]
for i in range(1, len(nums)):
rt -= nums[i]
return rt
@staticmethod
def mulNums(*nums):
rt = 1
for i in range(len(nums)):
rt *= nums[i]
return rt
@staticmethod
def divNums(*nums):
for i in range(1, len(nums)):
if not nums[i]:
print('illegal calculate!!!')
return -1
if nums[0] == 0:
rt = 0
else:
rt = nums[0]
for i in range(1, len(nums)):
rt /= nums[i]
return rt
def main():
mas = MathMethod
print(mas.addNums(1, 2, 3, 4, 5, 7))
print(mas.subNums(1, 2, 3, 4, 5, 7))
print(mas.mulNums(1, 2, 3, 4, 5, 7))
print(mas.divNums(1, 2, 3, 4, 5, 7))
print('e', mas.e, ' pi', mas.pi)
if __name__ == '__main__':
main()
1.什么是類:對擁有同一屬性和方法的對象的封裝
類是抽象的
類中的相同屬性是不能確定的
2.什么是對象:對象就是類的實例
對象是具體的
對象的屬性是確定的
3.面向?qū)ο缶幊?/p>
面向過程編程:一步一步寫代碼實現(xiàn)功能→工具:邏輯和算法
函數(shù)式編程:面對問題考慮有沒有擁有某種功能函數(shù)→工具:函數(shù)
面向?qū)ο缶幊?面對問題考慮有沒有相應(yīng)的對象來解決→工具:類和對象
類的聲明:
class 類名(父類):
屬性
方法
class Person:
'''類的說明'''
# 聲明兩個對象方法,需要使用對象來調(diào)用
# 對象方法默認(rèn)有一個self參數(shù),調(diào)用的時候系統(tǒng)會自動傳參數(shù)
# 誰調(diào)用這個方法,self就是誰
def eat(self):
print(self)
print('吃飯呢!!!')
def sleep(self):
print(self)
print('睡覺呢!!!')
對象名 = 類名()
方式:對象.方法()/對象.屬性
if __name__ == '__main__':
# 聲明對象
p1 = Person()
print(p1)
p1.eat()
# 一個類可以有多個對象
p2 = Person()
# 對象可以調(diào)用對象方法
print(p2)
p2.sleep()
class 類名:
def __init__(self):
self.屬性名 = 初值
self.屬性名2 = 初值2
self.屬性名3 = 初值3
class Person:
'''人類'''
def __init__(self, name='', age=0, gender='Female'):
# 聲明對象的屬性
print('++++++++')
'''
name,age,gender就是person類的對象屬性,只能通過對象調(diào)用
'''
self.name = name
self.age = age
self.gender = gender
self.height = 191
if __name__ == '__main__':
# 注意構(gòu)造方法中的參數(shù)是直接傳給init方法的參數(shù)的
p1 = Person('Shin', 21, 'Male')
print(p1.name)
print(p1.age)
print(p1.height)
p2 = Person('Kris', 18, 'Male')
print(p2.name, p2.age, p2.gender, p2.height)
p2 = Person('doge')
p5 = Person(gender='male')
class Dog:
'''狗類'''
def __init__(self, age=1, color='red'):
self.age = age
self.color = color
def mian():
d1 = Dog(0, 'white')
print(d1.age, d1.color)
print(d1.__getattribute__('age'))
print(getattr(d1, 'age'))
d1.age = 4
print(d1.age)
d1.__setattr__('color', 'brown')
setattr(d1, 'age', 10)
d1.name = '狗哥'
print(d1.name)
d1.__setattr__('type', '金毛')
setattr(d1, 'gender', '雄')
del d1.color
# print(d1.color)
d1.__delattr__('name')
delattr(d1, 'gender')
class Student:
def __init__(self, name='', age=18, gender='male'):
self.name = name
self.age = age
self.gender = gender
def study(self):
print('%s學(xué)習(xí)呢!!!' % self.name)
stu1 = Student('周潤發(fā)', 20, 'Male')
print(stu1.name, stu1.__getattribute__('age'), getattr(stu1, 'gender', None))
setattr(stu1, 'tel', '123321123')
stu1.__setattr__('age', '40')
stu1.__delattr__('gender')
stu1.study()
if __name__ == '__main__':
mian()
class Person:
__slots__ = ('name', 'age', 'height', 'id')
def __init__(self, name='', age=0):
self.name = name
self.age = age
# 自定義對象的打印格式
# id():python內(nèi)置函數(shù),功能是獲取變量地址
def __str__(self):
return self.name + ',' + str(self.age)
def main():
p1 = Person('王根基', 15)
p1.name = '小三'
p1.height = 177
print(p1)
if __name__ == '__main__':
main()
屬性:對象的屬性,類的字段(屬性)
對象屬性:屬于對象的,不同對象對應(yīng)的值可能不一樣(對象屬性,通過對象使用)
類的字段:聲明在類里面 函數(shù)外面 類屬性屬于類(類的字段,通過類使用)
方法:對象方法(方法),類方法,靜態(tài)方法
對象方法:自帶一個self參數(shù),一般要通過對象去調(diào)用
類方法:
1.使用@classmethod修飾
2.自帶一個cls參數(shù),不傳參,誰調(diào)用就指向誰
靜態(tài)方法:
1.使用@staticmethod修飾函數(shù)
2.沒有默認(rèn)參數(shù)
3.只能通過類來調(diào)用
class Person:
# number是類字段
number = 0
def __init__(self, name='', age=1):
self.name = name
self.age = age
# eat 方法是對象方法
def eat(self, food):
print('%s吃%s' % (self.name, food))
@classmethod
def ruinEarth(cls):
# cls指向調(diào)用這個方法的類,cls可以當(dāng)作類來用
p2 = cls('z3') # 可以使用cls創(chuàng)建對象
print(p2.name)
print(cls.number) # 可以通過cls使用類的自段
print('魂淡')
# 使用@staticmethod修飾靜態(tài)方法,沒有默認(rèn)參數(shù)
@staticmethod
def saveWater():
print('節(jié)約用水')
def main():
# 類的字段要用類來使用
print(Person.number)
# 對象的屬性要通過對象來使用
p1 = Person('根基')
print(p1.name)
p1.eat('人')
# 類方法通過類來調(diào)用
Person.ruinEarth()
# 靜態(tài)方法通過類來調(diào)用
Person.saveWater()
class Student:
def __init__(self, name='', age=10):
self.name = name
self.age = age
def __str__(self):
return 'name:'+str(self.name)+' age:'+str(self.age)
class ClassA:
def __init__(self, name='', students=None):
self.name = name
self.students = students
def addStudent(self):
stu = Student('渣渣輝', 18)
self.students.append(stu)
print('增加一個學(xué)生')
def searcherStudent(self):
for stu in self.students:
print(stu)
def __str__(self):
return str(self.name)+str(self.students)
class mathMethod:
def plus(self, x, y):
return x + y
def sub(self, x, y):
return x - y
def mul(self, x, y):
return x * y
def div(self, x, y):
return x / y
cls1 = ClassA('py1805', [])
cls1.addStudent()
print(cls1.students[0])
if __name__ == '__main__':
main()
1.聲明一個電腦類:
屬性:品牌、顏色、內(nèi)存大小
方法:打游戲、寫代碼、看視頻
a.創(chuàng)建電腦類的對象,然后通過對象點的方式獲取、修改、添加和刪除它的屬性
b.通過attr相關(guān)方法去獲取、修改、添加和刪除它的屬性
'''
@Author: Kris Shin
@Date: 2018-07-31 19:00:25
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:00:25
1.聲明一個電腦類:
屬性:品牌、顏色、內(nèi)存大小
方法:打游戲、寫代碼、看視頻
a.創(chuàng)建電腦類的對象,然后通過對象點的方式獲取、修改、添加和刪除它的屬性
b.通過attr相關(guān)方法去獲取、修改、添加和刪除它的屬性
'''
class Computer:
def __init__(self, brand='', color='', memory=1):
self.brand = brand
self.color = color
self.memory = memory
def playGame(self):
print('%s can playing game' % self.brand)
def typeCodes(self):
print('%s can typing code' % self.brand)
def watchVideo(self):
print('%s can watching video' % self.brand)
def main():
# 創(chuàng)建對象
cpt1 = Computer('God of war', 'black', 8)
# 點語句獲取值
print(cpt1.brand, cpt1.color, cpt1.memory)
# 增加屬性
cpt1.fans = 3
print(cpt1.fans)
# 修改屬性
cpt1.memory = 32
print(cpt1.memory)
# 刪除屬性
del cpt1.fans
# print(cpt1.fans) # 報錯computer對象沒有fans屬性
cpt2 = Computer('Dell', 'sliver', 4)
# getattr相關(guān)方法
print(cpt2.__getattribute__('brand'))
print(cpt2.__getattribute__('color'))
print(getattr(cpt2, 'memory'))
# setattr相關(guān)方法
cpt2.__setattr__('fans', 2)
print(cpt2.__getattribute__('fans'))
# delattr 相關(guān)方法
delattr(cpt2, 'fans')
# print(getattr(cpt2,'fans')) # 報錯computer對象沒有fans屬性
setattr(cpt2, 'color', 'white')
print(cpt2.__getattribute__('color'))
if __name__ == '__main__':
main()
狗的屬性:名字、顏色、年齡 狗的方法:叫喚
人的屬性:名字、年齡、狗 人的方法:遛狗
a.創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃
'''
@Author: Kris Shin
@Date: 2018-07-31 19:20:53
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:20:53
2.聲明一個人的類和狗的類:
狗的屬性:名字、顏色、年齡 狗的方法:叫喚
人的屬性:名字、年齡、狗 人的方法:遛狗
a.創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃
'''
class Dog(object):
def __init__(self, name='', age=1, color=''):
self.name = name
self.age = age
self.color = color
def woof(self):
print('%s is woofing' % self.name)
class Person(object):
def __init__(self, name='', age=0, dog=Dog()):
self.name = name
self.age = age
self.dog = dog
def playWithDog(self):
print('%s is playing with %s' % (self.name, self.dog.name))
def main():
huang = Dog('大黃', color='brown')
ming = Person('小明', 23, huang)
ming.playWithDog()
if __name__ == '__main__':
main()
屬性:長、寬 方法:計算周長和面積
a.創(chuàng)建不同的矩形,并且打印其周長和面積
'''
@Author: Kris Shin
@Date: 2018-07-31 19:32:19
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:32:19
3.聲明一個矩形類:
屬性:長、寬 方法:計算周長和面積
a.創(chuàng)建不同的矩形,并且打印其周長和面積
'''
class Rect(object):
def __init__(self, width=0, height=0):
self.width = width
self.height = height
print('width:' + str(width) + ' height:' + str(height))
def getArea(self):
return str(self.width * self.height)
def gerCLength(self):
return str(2 * (self.height + self.width))
def main():
rt1 = Rect(5, 6)
rt2 = Rect(12, 19)
rt3 = Rect(3.1415, 15.9876)
rt4 = Rect(2, 6)
rt5 = Rect(4, 4)
print('rect1 area:' + rt1.getArea() + ' girth:' + rt1.gerCLength())
print('rect2 area:' + rt2.getArea() + ' girth:' + rt2.gerCLength())
print('rect3 area:' + rt3.getArea() + ' girth:' + rt3.gerCLength())
print('rect4 area:' + rt4.getArea() + ' girth:' + rt4.gerCLength())
print('rect5 area:' + rt5.getArea() + ' girth:' + rt5.gerCLength())
if __name__ == '__main__':
main()
屬性:姓名,年齡,學(xué)號 方法:答到,展示學(xué)生信息
創(chuàng)建一個班級類:
屬性:學(xué)生,班級名 方法:添加學(xué)生,刪除學(xué)生,點名
'''
@Author: Kris Shin
@Date: 2018-07-31 19:42:49
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 19:42:49
4.創(chuàng)建一個學(xué)生類:
屬性:姓名,年齡,學(xué)號 方法:答到,展示學(xué)生信息
創(chuàng)建一個班級類:
屬性:學(xué)生,班級名 方法:添加學(xué)生,刪除學(xué)生,點名
'''
class Student(object):
def __init__(self, name='', age=0, id=''):
self.name = name
self.age = age
self.id = id
def arriveAt(self):
print(
'%s %s %d %s is here!!' % (self.id, self.name, self.age, self.id))
class Class(object):
def __init__(self, name='', students=[]):
self.name = name
self.students = students
def addStu(self, stu=Student()):
self.students.append(stu)
print('add a student %s !!' % stu.name)
def delStu(self, stu):
self.students.remove(stu)
print('del a student %s !!' % stu.name)
def getStu(self):
for i in range(len(self.students)):
self.students[i].arriveAt()
def main():
stu1 = Student(name='aaa', id='001', age=18)
stu2 = Student('bbb', 20, '002')
cls = Class("lala", [stu1])
cls.addStu(stu2)
stu3 = Student('liupi', 50, '003')
cls.addStu(stu3)
cls.delStu(stu1)
cls.getStu()
if __name__ == '__main__':
main()
'''
@Author: Kris Shin
@Date: 2018-07-31 20:06:47
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 20:06:47
5.寫一個類,封裝所有和數(shù)學(xué)運算相關(guān)的功能(包含常用功能和常用值,例如:pi,e等)
'''
class MathMethod(object):
e = 2.71
pi = 3.14
@staticmethod
def addNums(*nums):
rt = 0
for i in range(len(nums)):
rt += nums[i]
return rt
@staticmethod
def subNums(*nums):
rt = nums[0]
for i in range(1, len(nums)):
rt -= nums[i]
return rt
@staticmethod
def mulNums(*nums):
rt = 1
for i in range(len(nums)):
rt *= nums[i]
return rt
@staticmethod
def divNums(*nums):
for i in range(1, len(nums)):
if not nums[i]:
print('illegal calculate!!!')
return -1
if nums[0] == 0:
rt = 0
else:
rt = nums[0]
for i in range(1, len(nums)):
rt /= nums[i]
return rt
def main():
mas = MathMethod
print(mas.addNums(1, 2, 3, 4, 5, 7))
print(mas.subNums(1, 2, 3, 4, 5, 7))
print(mas.mulNums(1, 2, 3, 4, 5, 7))
print(mas.divNums(1, 2, 3, 4, 5, 7))
print('e', mas.e, ' pi', mas.pi)
if __name__ == '__main__':
main()
6.寫一個班級類,屬性:班級名、學(xué)生;功能:添加學(xué)生、刪除學(xué)生、根據(jù)姓名查看學(xué)生信息,展示班級的所有學(xué)生信息
'''
@Author: Kris Shin
@Date: 2018-07-31 20:36:37
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-31 20:36:37
6.1.寫一個班級類,屬性:班級名、學(xué)生;功能:添加學(xué)生、刪除學(xué)生、根據(jù)姓名查看學(xué)生信息,展示班級的所有學(xué)生信息
'''
class Student(object):
def __init__(self, name='', age=0, id=''):
self.name = name
self.age = age
self.id = id
def ShowStu(self):
print('%s %s %d %s' % (self.id, self.name, self.age, self.id))
class Class(object):
def __init__(self, name='', students=[]):
self.name = name
self.students = students
def addStu(self, stu=Student()):
self.students.append(stu)
print('add a student %s !!' % stu.name)
def delStu(self, stu):
self.students.remove(stu)
print('del a student %s !!' % stu.name)
def ShowStus(self):
for i in range(len(self.students)):
self.students[i].ShowStu()
def main():
stu1 = Student(name='aaa', id='001', age=18)
stu2 = Student('bbb', 20, '002')
cls = Class("lala", [stu1])
cls.addStu(stu2)
stu3 = Student('liupi', 50, '003')
cls.addStu(stu3)
cls.delStu(stu1)
cls.ShowStus()
if __name__ == '__main__':
main()