1. 烤地瓜案例
class SweetG(object):
def __init__(self):
self.status = '生瓜'
self.cookt = 0
self.add = []
def cook(self,t):
self.cookt +=t
if self.cookt < 3:
self.status = '还是生的'
elif self.cookt < 6 :
self.status = '好需要一会'
elif self.cookt <= 8 :
self.status = '好了'
else:
self.status = '糊了'
def add_g(self,t1):
return self.add.append(t1)
def __str__(self):
s = self.status+'\t'+"考了"+str(self.cookt)+"分"
s += '使用了什么调料 \n'
for i in self.add:
s +=(i+'\n')
return s
dg = SweetG()
dg.cook(2)
print(dg)
dg.cook(2)
dg.add_g('蜂蜜')
print(dg)
dg.cook(4)
dg.add_g('juce')
print(dg)
2. 类的复合应用
设计一个类的时候,类中包含其他类的对象
'''
类的复合
人有一条狗,想听狗叫
'''
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def add_pet(self,pet):
self.pet = pet
def listen_dog(self,n):
self.pet.bark(n)
def __str__(self):
return self.name+str(self.age)
class Dog(object):
def __init__(self,name,age):
self.name = name
self.age = age
def bark(self,n):
for i in range(n):
print('won won ....')
tom = Person('tom',12)
print(tom)
tom.add_pet(Dog('xiaoxioa',4))
tom.listen_dog(10)
3. 存放家具的案例
'''
向房子中添加家具
'''
class Furniture(object):
def __init__(self,name,area):
self.name = name
self.area = area
def __str__(self):
return f'家具:{self.name} 占用{self.area}平方米'
class House(object):
def __init__(self,address,area):
self.address = address
self.area = area
self.freearea = area * 0.3
self.futniture = []
def add_furniture(self,fur):
if fur.area < self.freearea:
self.freearea -= fur.area
self.futniture.append(fur)
print(f'成功的添加了{fur.name},剩余的空间大小{self.freearea}')
else:
print(f'剩余的空间不足,无法添加{fur.name}',end='\t')
print(f'剩余的空间大小{self.freearea}平方米')
def __str__(self):
s = '我的house房子的地址'+self.address+'\t占地的面积'+str(self.area)+'\n'
# s += '添加的家具有:\t'
if len(self.futniture)==0:
s += '还没有添加家具'
return s
else:
s += '添加的家具有:\n'
for c in self.futniture:
s += str(c)+'\n'
return s
house = House('长安街1号',120)
# print(house)
house.add_furniture(Furniture('沙发',12))
house.add_furniture(Furniture('沙发2',12))
house.add_furniture(Furniture('沙发3',12))
print(house)
注意的事项:在打印的时候,要进行字符串的转换,因为此时的fur家具变量是一个对象<class ‘main.Furniture’>,不是单纯的字符串,不能进行字符串的家操作
4.类的私有属性和方法
默认不加任何修饰的就是共有的属性和方法
在前边添加__表示私有的,私有属性确保了数据的安全,可以通过编写set、get方法来获取私有属性,而不是直接通过变量名就可以直接的访问
案例:
class Bank(object):
def __init__(self,name,money):
self.__name = name
self.__money = money
# 姓名一旦创建就不可以修改,所以只提供get方法
def get_name(self):
return self.__name
def get_money(self):
return self.__money
def set_money(self,jine):
if isinstance(jine,int):
self.__money=jine
else:
print('不能更改')
def show(self):
print(f'姓名:{self.__name} \t 余额:{self.__money}')
jack = Bank('jack',12222)
# 在类的外部不可以访问类的私有属性
# print(jack.name) AttributeError: 'Bank' object has no attribute 'name'
#这个时候我们可以只用方法来获取
# print(jack.get_name())
# jack.show()
jack.set_money(22222)
jack.show()
# 私有属性的原理,但是不会使用
# print(jack._Bank__name)
私有方法:通过类中共有的方法来进行调用
class Download(object):
def __init__(self):
self.__list=[]
def add_task(self,url):
self.__list.append(url)
self.__download(url)
def __download(self,url):
print(f'通过地址{url}下载中...')
s = Download()
s.add_task('www.baidu.com')
# 私有的方法在外部不可以使用的