发布于2020-03-15 18:05 阅读(1474) 评论(0) 点赞(1) 收藏(3)
Ps:请先看案例,后文有对三大方法的分类总结
class Room:
def __init__(self,name,owner,width,length,heigh):
self.name= name
self.owner= owner
self.width= width
self.length= length
self.heigh= heigh
#计算体积的一个方法
@property #绑定实例的方法(把整个类当做一个装饰器),property操作相当于把函数属性变成了数据属性
def cal_area(self):
print('%s的房间的体积为:' %self.owner, self.width * self.length * self.heigh)
#实例化
v = Room('卧室','Ross',50,50,30) #传入self的参数
v2 = Room('浴室','山治',2,2,3)
#调用对象,因为被变成了数据属性(静态属性),就不需要加括号运行了
#v.cal_area()
#v2.cal_area()
v.cal_area
v2.cal_area
运行结果:
class Room:
tag = 'in Room'
def __init__(self,name,owner,width,length,heigh):
self.name= name
self.owner= owner
self.width= width
self.length= length
self.heigh= heigh
def pr_info(self):
print(self.tag)
@classmethod #一个专门供类使用的方法(类方法),可以不通过实例,只执行类的方法
def pr_infomation(cls,x): #必要参数cls,但不需要再传入self了,因为类中包含了self
print(cls) #打印pr_infomation方法所在的类
print(cls.tag) #这样就可以单独调用类的方法
print(x) #外部传入的形参x
@staticmethod #声明定义一个静态方法,不绑定cls也不绑定self
def eat_food(a,b,c):
print('{} {} {}正在吃饭'.format(a,b,c))
#因为没有绑定类,也没有绑定实例,故不能运行cls和self的属性
#print('%s,%s来自静态方法' %(self.name,self.owner))
#实例化
'''v = Room('卧室','Ross',50,50,30) #传入参数
v2 = Room('浴室','山治',2,2,3)
#调用对象,说明self是可以调用类中定义的数据属性的
v.pr_infomation()
v2.pr_infomation()'''
#类方法,可以传入参数,可以使用类属性
Room.pr_infomation('1') #执行类中的方法,但不实例化,只能访问类的属性
Room.pr_infomation('带参类方法') #传入参数的类方法
#静态方法,只能使用传入的参数
Room.eat_food('路飞','索隆','山治') #用类来调用静态方法
vv = Room('浴室','山治',2,2,3)
vv.eat_food('路飞','索隆','山治') #用实例来调用静态方法方法,同样可行
运行结果:
静态属性(property): 实例属性和类属性都可以访问(属性都能用,但不能传入参数)
类方法(classmethod): 只访问类属性,不能访问实例的属性(类属性能用,传入参数也能用)
静态方法: 不能访问类属性,也不能访问实例属性(只能使用函数调用时传入的参数)
class Head:
pass
class Hand:
pass
class Foot:
pass
class Trunk:
pass
class Body:
def __init__(self,name,id_num):
self.name= name
self.id_num= id_num
#用另外一个类来当属性,就称为类的组合
self.head= Head()
self.hand= Hand()
self.foot= Foot()
self.trunk= Trunk()
#实例化
p1 = Body('1234556789','乌索普')
print(p1.__dict__) #另外的类也包括在Body类的属性里面了
运行结果:
#公司类
class Company:
def __init__(self,name,location): #公司名字,公司位置
self.name= name
self.location= location
def hr_interview(self): #面试的动作
print('%s 正在开展面试' %self.name)
#职位类
class Position:
def __init__(self,name,salary,period,company): #4个形参
self.name= name
self.salary= salary
self.period= period
self.company= company
#实例化,存放不同公司的对象
v1 = Company('迪达拉','北京')
v2 = Company('极界','南京')
v3 = Company('木心丸','东京')
v4 = Company('串串香','西京')
vv = Position('熊二',10000,6,v1) #最后一个参数传入一个对象,表示公司
#调用对象
vv.company.hr_interview() #输出组合后的结果,直接调用对象
#让用户实现选择:
#直接输出的语句,表示提示用户可供的选择
print("1-->迪达拉,北京\n2-->极界,南京\n3-->木心丸,东京\n4-->串串香,西京")
while True:
menu = {
'1':v1,
'2':v2,
'3':v3,
}
choice = input('请选择公司>>>')
com_obj = menu[choice] #让用户输入的当做键来匹配对应的值,即那几个公司信息
choice2 = input('请选择职位名>>>')
choice3 = input('请选择薪资>>>')
choice4 = input('请选择周期>>>')
new_pt = Position(choice2,choice3,choice4,com_obj) #创建一个职位的对象
#输出对应的信息,通过类的属性来输出(包括组合属性)
print('{}公司位置在{}\n您应聘的职位是{},薪资{},周期{}'.format(new_pt.company.name,
new_pt.company.location, new_pt.name, new_pt.salary, new_pt.period))
运行结果:
什么时候用类的组合呢?
就是当类之间有显著不同,并且较小的类是较大的类所需要的组件时。
另外,还有类的继承与多态,与类的组合不同的另一个概念,将在后续文章进行总结
作者:老铁哪来的
链接:https://www.pythonheidong.com/blog/article/259925/b8a48c8fefb8565645c8/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!