一、day24复习

class school:
x=1
#__init__初始化函数,用来帮类实例化一个具体的对象
def __init__(self,name,addr):
#前面的Name是一个需要封到字典里面的一个key,后面的name是传过来的一个值
self.Name=name
self.Addr=addr
def tell_info(self):
print('学校的详细信息是:name:%s addr:%s'%(self.Name,self.Addr))
#实例化的过程
s1=school('charon','qqhr')
print(school.__dict__)
print(s1.__dict__)
s1.tell_info() 结果:
{'__module__': '__main__', 'x': 1, '__init__': <function school.__init__ at 0x7f8835927158>, 'tell_info': <function school.tell_info at 0x7f88359271e0>, '__dict__': <attribute '__dict__' of 'school' objects>, '__weakref__': <attribute '__weakref__' of 'school' objects>, '__doc__': None}
{'Name': 'charon', 'Addr': 'qqhr'}
学校的详细信息是:name:charon addr:qqhr

二、静态属性

封装操作好处可以将背后的操作隐藏起来

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 住的 %s 总面积是%s' %(self.owner,self.name,self.width*self.length))
return self.width*self.heigh r1=Room('WC','pluto',100,12,123)
#####r1.cal_area
print(r1.cal_area)
print(r1.name) 结果:
12300
WC

调用cal_area函数相当于调用了直接参数,将背后的操作隐藏起来,@property可以封装你函数的逻辑,像是调用普通逻辑一样s

三、类方法

类有属性,包含数据属性跟函数属性,

class Room:
tag=1
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 住的 %s 总面积是%s' %(self.owner,self.name,self.width*self.length))
return self.width*self.heigh
def test(self,name):
print('from test',self.name)
@classmethod
#cls接收一个类名,类方法,自动传类名参数
def tell_info(cls,x):
print(cls)
print('----->',cls.tag,x) print(Room.tag)
Room.tell_info(10) 结果:
1
<class '__main__.Room'>
-----> 1 10

四、静态方法

class Room:
tag=1
def __init__(self,name,owner,width,length,heigh):
self.name=name
self.owner=owner
self.width=width
self.length=length
self.heigh=heigh @property
def cal_area(self):
# print('%s 住的 %s 总面积是%s' % (self.owner,self.name, self.width * self.length))
return self.width * self.length @classmethod
def tell_info(cls,x):
print(cls)
print('--》',cls.tag,x)#print('--》',Room.tag)
# def tell_info(self):
# print('---->',self.tag)
@staticmethod
#相当于类的工具包
def wash_body(a,b,c):
print('%s %s %s正在洗澡' %(a,b,c)) r1=Room('厕所','alex',100,100,100000)
r1.wash_body('charon','pluto','to')
Room.wash_body('charon','pluto','to') 结果:
charon pluto to正在洗澡
charon pluto to正在洗澡

@staticmethod静态方法只是名义上归属类管理,不能使用类变量和实例变量,是类的工具包

五、小节

静态属性:@property把函数封装成一个数据属性的形似,让外部调的时候看不到内部逻辑,因为可以传递self。所有静态属性既可以访问实例属性,又可以访问类属性

类方法:@classmethod函数默认参数写成cls,cls代表类。类能访问类的数据属性,类的函数属性,不能访问到实例的属性,实例是类里面(下的)包的东西,不能从外面作用域访问的里面作用域

静态方法:@staticmethod静态方法只是名义上归属类管理,不能使用类变量和实例变量,是类的工具包,不能访问类属性,也不能访问实例属性

六、组合

class School:
def __init__(self,name,addr):
self.name=name
self.addr=addr class Course:
def __init__(self,name,price,preiod,school):
self.name=name
self.price=price
self.preiod=preiod
self.school=school s1=School('oldboy','BJ')
s2=School('oldboy','NJ')
s3=School('oldboy','DJ') #c1=Course('linux',10,'1h',s1)
#print(c1.__dict__)
##print(s1)
#print(c1.school.name)
msg='''
1.oldboy BJschool
2.oldboy NJschool
3.oldboy DJschool
'''
while True:
print(msg) menu={
'1':s1,
'2':s2,
'3':s3,
} choice=input('>>>>>choine school:') school_obj=menu[choice] name = input('>>>>course name:')
price = input('>>>>>>>course price:')
preiod = input('>>>>>course preiod:') new_course=Course(name,price,preiod,school_obj)
print('course [%s] of [%s] school' % (new_course.name1,new_course.school.name))

day25 Python的更多相关文章

  1. day25 Python四个可以实现自省的函数,反射

    python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) ...

  2. day25 python学习 继承,钻石继承 多态

    ---恢复内容开始--- 通过一个列子认识父类和子类中,子类的如何实现对父类默认属性调用,同时拥有自己的属性,如何在子类中调用父类的方法,class Ainmal: country='afdas' d ...

  3. day25 python学习 继承,钻石继承

    通过一个列子认识父类和子类中,子类的如何实现对父类默认属性调用,同时拥有自己的属性,如何在子类中调用父类的方法,class Ainmal: country='afdas' def __init__(s ...

  4. day25 Python __setattr__

    #__getattr__只有在使用点调用属性且属性不存在的时候才会触发 class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(se ...

  5. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  6. Python:Day25 成员修饰符、特殊成员、反射、单例

    一.成员修饰符 共有成员 私有成员,__字段名,__方法 - 无法直接访问,只能间接访问 class Foo: def __init__(self,name,age): self.name = nam ...

  7. python面向对象之 封装(Day25)

    封装: 隐藏对象的属性和实现细节,仅对外提供公共访问方式 好处:1.将变化隔离 2.便于使用 3.提高复用性 4.提高安全性 封装原则: 1.将不需要对外提供的内容隐藏起来 2.把属性都隐藏,提供公共 ...

  8. python练习题-day25

    class Person: __key=123 def __init__(self,username,password): self.username=username self.__password ...

  9. python day25 正则表达式

    2019.4.30 S21 day25笔记总结 正则表达式 1. 正则表达式 re模块:re模块本身只是用来操作正则表达式的,和正则本身没关系. 正则表达式:是一种规则 匹配字符串的规则. 为什么要有 ...

随机推荐

  1. thinkphp3.2.3模板渲染支持三元表达式

    thinkphp3.2.3模板渲染支持三元表达式 {$status?'正常':'错误'} {$info['status']?$info['msg']:$info['error']} 注意:三元运算符中 ...

  2. [转]原生JS-查找相邻的元素-siblings方法的实现

    在针对element的操作里,查找附近的元素是一个不可少的过程,比如在实现tab时,其中的一个div增加了“on”class,其他的去除“on”class.如果用jquery的朋友就肯定不会陌生sib ...

  3. SAP MM 没有维护MRP 视图的物料可以正常参与采购业务

    SAP MM 没有维护MRP 视图的物料可以正常参与采购业务 Material number: R000006872,没有维护MRP 视图, ​ 也就是没有指定该物料来源是采购还是自制.此种情况下,S ...

  4. 使用vmimeNET解析账单邮件

    大概所有做APP的公司都是不愿意做自定义的,哪怕自己的功能再烂也愿意慢慢修补不愿意开源一部分. 卡牛- 51信用卡- 一次次的逾期   自己写个信用卡管理工具,从邮件中提取账单,还款后做个登记,到了还 ...

  5. saltstack部署配置

    共计使用三台虚拟机进行部署实验,系统环境:centos7.3 在master上进行部署配置: 配置主机名 [root@localhost ~]# hostname salt-master [root@ ...

  6. mysql之全球化和本地化:字符集、校对集、中文编码问题

    本文内容: 什么是字符集?什么是校对集? 查看字符集和校对集 设置字符集和校对集 mysql中的中文数据问题 首发日期:2018-04-19 什么是字符集?什么是校对集? 字符集是字母和符号的集合,每 ...

  7. python 画个小猪佩奇

    不知道大家小时候有没有学习过logo语言,就是操纵一只小王八,来画各种图案.博主小学微机课就学习了这个,最近发现python的turtle包就是logo语言,所以画个小猪佩奇和大家分享. 代码来自知乎 ...

  8. 单线程泵问题(com操作时间超过60s报错)

    CLR   无法从   COM   上下文   0x197bf0   转换为   COM   上下文   0x197a80,这种状态已持续   60  秒.拥有目标上下文/单元的线程很有可能执行的是非 ...

  9. Android重复依赖解决办法

    参考文章:https://blog.csdn.net/qq_24216407/article/details/72842614 在build.gradle引用了Vlc的安卓包:de.mrmaffen: ...

  10. iOS 验证码按钮倒计时

    在app 注册或者登录 需要验证码的地方.为了避免短时间内刷验证码.往往会加上一层验证. 倒计时结束后.可以重新获取! 代码实现如下: // _CountdownTime 倒计时总时间: //_tim ...