一、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. 包含min函数的栈 ,二叉树的镜像

    包含min函数的栈 问题 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 代码 # -*- coding:utf-8 -*- class Sol ...

  2. POJ 2311 Cutting Game(二维SG+Multi-Nim)

    Cutting Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4798   Accepted: 1756 Desc ...

  3. POJ1743 Musical Theme(后缀数组 二分)

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 33462   Accepted: 11124 Description A m ...

  4. 2018-01-02 JavaScript实现ZLOGO: 用语法树实现多层循环

    原址: https://zhuanlan.zhihu.com/p/32571516 照例先上演示弱效果图. 演示地址照旧: 代码如下: 开始 循环4次 循环4次 前进50 左转90度 到此为止 右转9 ...

  5. Linux 线程实现模型

    1.Linux 线程的调度实现可以有两种模型, 一种是完全由进程负责,进程内启动一个线程调度器,由进程内的线程调度器完成调度. 缺点是:(1)各个线程自己加主动释放cpu的流程 (2)进程可能阻塞,达 ...

  6. htnl 定位

    相对定位 相对定位:position:relative; 相对定位:相对定位是相对于元素在文档中的初始位置——首先它出现在它所在的位置上(即不设置position时的位置,然后通过设置垂直或水平位置, ...

  7. Eclipse For JavaSE安装、配置、测试

    Eclipse For JavaSE安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试 5.ADT安装与Android开发测试 6. ...

  8. 整理一些.net core中的错误代码

    在hosting .net core时,有些错误代码并不容易理解. 作为标记,方便查询,这些错误代码可能不会出现在VS的错误查找工具里,也不会出现在错误代码转字符描述的函数里. COR_E_AMBIG ...

  9. The concurrent snapshot for publication 'xxx' is not available because it has not been fully generated or the Log Reader Agent is not running to activate it

    在两台测试服务器部署了复制(发布订阅)后,发现订阅的表一直没有同步过来.重新生成过snapshot ,也重新初始化过订阅,都不能同步数据,后面检查Distributor To Subscriber H ...

  10. EOS智能合约开发(一):EOS环境搭建和启动节点

    EOS和以太坊很像,EOS很明确的说明它就是一个区块链的操作系统,BM在博客中也是说过的. 可以这样比喻,EOS就相当于内置激励系统的Windows/Linux/MacOS,这是它的一个定位. 包括以 ...