# Author: Ghost
# Email: jiaci.liu@gmail.com '''
1-Review of last week
2-interface class, abstract class
3-packing
4-special methods
classmethod
staticmethod
property
5-reflection ******************
__hasattr__
__getattr__
__setattr__
__delattr__
6-advanced special methods
__call__
__new__
__getitem__
__setitem__
__delitem__
7-time, random,
''' '''
Review: combination
'''
# class A:
# name = 'alex'
# def __init__(self, name1, age1):
# self.name1 = name1
# self.age1 = age1
#
# def func(self):
# print(self.name1)
# print(self.name)
#
# def func1(self):
# print(self.age1)
#
# class B:
# name2 = 'xiaobai'
# def func3(self):
# print('in func3')
#
# obj = A('isa', 24)
# objB = B()
#
# obj.new = objB
# print(obj.new.name2) # class A:
# n1 = '太白'
#
# def __init__(self, name1, age1):
# self.name = name1
# self.age = age1
#
# def func(self):
# print(self.name)
# self.func1()
# print(self.n1)
# print(666)
#
# def func1(self):
# print(777)
#
# obj = A('alex', 73)
# # obj.func()
#
# class B:
# n2 = 'WuSir'
#
# def func3(self):
# print('in func3')
#
# b1 = B()
# obj.b = b1 # 组合 给对象新添加了一个属性'b'
# print(obj.b.n2)
# print(obj.__dict__) '''
single inheritage
''' # class A:
# name = 'alex'
#
# def func(self):
# print('IN A')
#
#
# class B(A):
# name = '太白'
#
# def func(self):
# # 下面两种表示方法作用相同:
# # A.func(self)
# # super().func()
# # super放前面则先执行A中的function, super放后面则先执行B中的
# print('IN b')
# super().func()
#
#
# obj = B()
# print(obj.name)
# obj.func() # 1. seek for 'name/obj' in current class first,
# if 'name/obj' exists, then execute, otherwise parent class will be checked
# 2. if attributes of parent class require to be inherited,
# attributes with exact names should not be defined in current class '''
execution sequence of dynamic and static attributes (functions)
1. seek for __init__() and execute it
2. seek for destination function in current object-->current class of the object-->parent class
'''
# class Parent:
# def func(self):
# print('in Parent func')
#
# def __init__(self):
# self.func()
#
# class Son(Parent):
# def func(self):
# print('in Son func')
#
# son1 = Son() # class Parent:
# def func(self):
# print(self.name)
# print('parent')
#
# def __init__(self, name):
# self.name = name
#
# class SON(Parent):
# def func(self):
# print('son')
# obj = SON('xiaobai')
# obj.func() '''
Interview questions:
1. attributes assignment inside of functions of a class cannot be referenced, eg.:c, t;
2. corresponding attributes of class cannot be reassigned if they were only reassigned in object;
'''
# class A:
# a = 0
# b = 1
# def __init__(self):
# c = 222
#
# def func(self):
# t = 444
#
# d = A()
# d.a = 'new a'
# d.b = 'new b'
# d.c = 'new c'
# print(d.__dict__)
# print(A.__dict__) # c, t are not inside of the dict of Class A
#
# print(A.c) # AttributeError: type object 'A' has no attribute 'c'
# print(A.t) # AttributeError: type object 'A' has no attribute 'c' '''
interface class
'''
# from abc import ABCMeta, abstractmethod
# class Pay(metaclass=ABCMeta):
# @abstractmethod
# def pay(self, money):
# pass
#
# class AliPay(Pay):
# def pay(self, money):
# print('alipay %s' % money)
#
# class wechat(Pay):
# def pay(self, money):
# print('wechat %s' % money)
#
# class QQpay(Pay):
# def qqpay(self, money):
# print('qqpay %s' % money)
#
# obj = QQpay()
# obj.qqpay(11) # TypeError: Can't instantiate abstract class QQpay with abstract methods pay '''
packing of class:
# 私有成员:私有变量,私有对象属性,私有方法
# 私有成员:类外面不可以访问,派生类不可以访问,类内面可以访问
'''
# class A:
# normattr = 'this is a normal attribute'
# __name = 'this is a private attribute'
#
# def __init__(self, name, item):
# self.name = name # normal object attribute
# self.__privateattr = item # private object attribute
#
# def func1(self):
# print('this is a normal function')
# self.__privatefunc()
#
# def __privatefunc(self):
# print(self.__name)
# print('this is a private object function')
#
# @property
# def func2(self):
# pass
#
# @staticmethod
# def func3():
# pass
#
# @classmethod
# def func4(cls):
# pass
#
# class AA(A):
# pass
#
# obj = A('parent class', 12)
# # obj.__privatefunc() # AttributeError: type object 'A' has no attribute '__privatefunc'
# # obj.__name # AttributeError: 'A' object has no attribute '__name'
# # obj.func1()
#
# son = AA('son class', 12)
# # son.__name # AttributeError: 'AA' object has no attribute '__name'
# # son.__privatefunc() # AttributeError: 'AA' object has no attribute '__privatefunc'
# son.func1() '''
@classmethod
# 类方法:必须通过类的调用,而且此方法的意义:就是对类里面的变量或者方法进行修改添加。
'''
# class A:
# def __init__(self, name, age):
# self.name = name
# self.age = age
#
# def func(self):
# print('this is a normal function')
#
# @classmethod
# def func2(cls, area, name1):
# cls.area = area
# cls.name = name1
#
# obj = A('name1', 32)
# obj.name = 'name2'
# obj.age = 22
# print(obj.__dict__)
#
# obj.func2('area', 'name3') # A.func2('area', 'name3') 可以实现相同的效果
# print(obj.__dict__)
# print(A.__dict__) '''
calculate how many times that One class has been sampled
'''
# class C:
# count = 0
# def __init__(self):
# C.cou()
#
# @classmethod
# def cou(cls):
# cls.count += 1
#
# obj = C()
# obj = C()
# obj = C()
# obj = C()
# obj = C()
# print(C.count) '''
@staticmethod
# 静态方法: 就是一个不依赖类以及对象的一个普通函数,为什么在类里面?
# 为了保证代码的一致性,可调控性,整洁性。
''' # class D:
# def __init__(self):
# print('initiation')
#
# @staticmethod
# def static_func(name, age):
# print(name, age)
#
# obj = D()
# D.static_func('xiaobai', 15) '''
@property
'''
# class F(object):
# def __init__(self, name, age):
# self.name = name
# self.age = age
#
# def func(self):
# print('this is a normal function')
#
# @property
# def property_func(self, value):
# self.name = value
# print('this is a property')
#
# @property_func.setter
# def property_func(self, value):
# self.name = value
# print(self.name)
# print('this is setter')
#
# @property_func.getter
# def property_func(self):
# return 'this is getter'
#
# @property_func.deleter
# def property_func(self):
# print('this is deleter')
#
#
# obj = F('alex', 12)
# obj.property_func = 'test setter'
# print(obj.name)
# print(obj.property_func)
# del obj.property_func '''
苹果:原始价位8元,折扣价格:0.8
'''
# class Produc:
# def __init__(self, name, origin_price, discount):
# self.name = name
# self.__origin_price = origin_price
# self.__discount = discount
#
# @property
# def Price(self):
# return self.__origin_price*self.__discount
#
# @Price.setter
# def Price(self, new_price):
# self.__origin_price = new_price
#
# obj = Produc('apple', 20, 0.8)
# print(obj.Price)
# obj.Price = 30
# print(obj.Price)
# print(obj.__dict__) # class Product:
#
# def __init__(self, name, origin_price, discount):
# self.name = name
# self.__origin_price = origin_price
# self.__discount = discount
# @property
# def price(self):
# return self.__origin_price * self.__discount
#
# @price.setter
# def price(self, new_price):
# self.__origin_price = new_price
# apple = Product('苹果', 8, 0.95)
# # print(apple.price)
# apple.price = 7
# print(apple.price) '''
反射!!!!
# 反射:通过 字符串 去操作对象(实例化对象 类, 模块)。
# hasattr() getattr() ***
# setattr() delattr() *
# 对实例化对象的示例
# isinstance(obj, class): whether obj is an object of class or not
# issubclass(class1, class2): whether class1 is a subclass of class2 or not
'''
# class A:
# pass
#
# class B(A):
# pass
#
# obj = B()
# print(isinstance(obj, B))
# print(issubclass(A, B)) # class A:
# name = 'alex'
# age = 23
#
# def __init__(self, gender, area):
# self.gender = gender
# self.area = area
#
# def func(self):
# print(self.gender)
#
# obj = A('male', 'shandong')
# # ret = getattr(obj, 'name')
# ret = getattr(obj, 'func')
# ret()
# # ret1 = hasattr(obj, 'func')
# print(ret1) # False
# ret2 = setattr(obj, 'height', 1.8)
# # ret3 = delattr(obj, 'func') #AttributeError: func (object has no function attributes)
# # delattr(A, 'func')
# print(ret)
# print(ret1)
# print(obj.__dict__)
# print(A.__dict__) # 对类 # class A:
#
# name = 'alex'
# def __init__(self):
# pass
#
# def func(self):
# print('IN func')
#
# # print(getattr(A, 'name'))
# # ret = getattr(A, 'func')
# # ret(1)
# ret = input('>>>>') # 'func'
# f1 = getattr(A, ret)(1) # 对当前模块(文件)
# def func():
# print('in func')
#
#
# import sys
#
# current_module = sys.modules[__name__]
#
# getattr(current_module, 'func')()
# # 对其他模块(文件) # import fs
# print(getattr(fs, 'name'))
# ret = getattr(fs, 'func')
# ret()
#
# # call the function in class in another module
# getattr(fs.test, 'func2')(1) # TypeError: func2() missing 1 required positional argument: 'self' # import fs
#
# print(getattr(fs,'n1'))
# ret = getattr(fs,'func')
# ret()
#
# # 方法一:
# clas = getattr(fs, 'A')
# print(clas.name)
#
# # 方法二:
# print(getattr(fs.A, 'name'))
# getattr(fs.A, 'func2')(1) '''
double-underlined function
1, __str__, __len__, 把对象当作字符串进行一系列操作时,对应的反应,必须包含return,且return必须返回对应操作需返回的数据类型; ''' #
# class A:
# def __init__(self):
# self.a=1
# self.b=2
# pass
#
# def __str__(self):
# print('this is __str__ method')
# return '__str__ return'
#
# def __len__(self):
# print('this is __len__ method')
# return len(self.__dict__)
#
# def __hash__(self):
# return hash(str(self.a))
#
# def __repr__(self):
# return 'this is __repr__'
#
# def __call__(self, *args, **kwargs):
# return
#
# def __eq__(self, other):
# if self.a == other:
# return True
# else:
# return False
#
# def __del__(self):
# return 'this is deleting an object'
#
#
# obj = A()
# print(obj)
# print(len(obj)) # TypeError: object of type 'A' has no len()
# print(hash(obj))
# print(repr(obj))
# print('%r' % obj) # %r, show initial data type
# test_repr = '123'
# print('%r' % test_repr) # '123'
# print('%s' % test_repr) # 123
# print(obj == 4) # class A:
# def __init__(self):
# pass
# def __str__(self):
# print(666)
# return '太白'
# a = A()
# # print(a)
# ret = '姓名:%s' % a
# print(ret) # class A:
# def __init__(self):
# pass
# def __repr__(self):
# return '太白'
# a = A()
# # print(repr(a))
# print('%r'%a) # class Foo:
#
# def __init__(self):
# pass
#
# def __call__(self, *args, **kwargs):
# print(args)
# print('__call__')
#
# obj = Foo()
# obj('WuSir', 'alex') # 对象() 触发 __call__()方法 # __new__ # 讨论的 __init__ __new__ 先后顺序
# class A:
# def __init__(self):
# self.x = 1
# print('in init')
#
# def __new__(cls, *args, **kwargs):
# print('in __new__')
# return object.__new__(cls)
#
# obj = A()
# print(obj.x) # 设计模式:单例模式:让一个类的实例化对象有且只有一个。 *** # class A:
# pass
# ret = A()
# ret1 = A()
# print(ret, ret1) # class A:
# __instance = None
# def __new__(cls, *args, **kwargs):
# if cls.__instance is None:
# obj = object.__new__(cls)
# cls.__instance = obj
# return cls.__instance
#
# ret1 = A()
# ret2 = A()
# ret3 = A()
# print(ret1, ret2, ret3) # __item__系列 __getitem__ __setitem__ __delitem__ ***
# 对一个对象进行类似于字典的操作,就会触发__item__系列的某个方法。
# class Foo:
# def __init__(self, name):
# self.name = name
#
# # def __getitem__(self, item):
# # # print('__getitem__此方法执行了')
# # # print(item)
# # # return self.item # self.'name'
# # return self.__dict__[item]
# # def __setitem__(self, key, value):
# # self.key = value
#
# def __delitem__(self, key):
# print('del obj[key]时,我执行')
# # self.__dict__.pop(key)
# # def __delattr__(self, item):
# # print('del obj.key时,我执行')
# # self.__dict__.pop(item)
#
#
# f = Foo('alex')
# # print(f['name'])
# # f['age'] = 25
# del f['name']
# print(f.__dict__)
'''
serializable modules: pkl, json, shelve
json: 网络传输
1. json.dump(obj, fp)方法接收一个文件句柄,直接将字典转换成json字符串写入文件
2. json.load(fp)方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
'''
# import json # json.dumps()/json.loads() are for data transmission between different tools,
# eg., python and Java
# dic = {'name': 'alex', 'age': 18, 'gender': 'male'}
# ret = json.dumps(dic, ensure_ascii=False) # 序列化过程 : 就是变成一个特殊的字符串
# print(ret) # json-typed string are characterized with double quotes
# print(dic) # python-typed string are characterized with single quotes
#
# result = json.loads(ret) # 反序列化:将序列化的特殊字符串反解成原来的类型。
# print(result) # dic.dump()/dic.load():
# f = open('json_file', 'w')
# ret = json.dump(dic, f)
# json.dump(): requires two arguments, content that required to be written, and file that required to be written in
# f.close() # f = open('json_file', 'r')
# print(json.load(f))
# # json.load() : only file to be read is necessary
# f.close() # exercise 2
# dic2 = {
# 1: {'name': 'alex', 'age': 23, 'gender': 'male'},
# 2: {'name': 'alex', 'age': 23, 'gender': 'female'},
# 3: {'name': 'alex', 'age': 23, 'gender': 'male'},
# 4: {'name': 'alex', 'age': 23, 'gender': 'male'}
# }
# dumps/loads
# ret = json.dumps(dic2, ensure_ascii=False)
# print(ret)
# print(json.loads(ret)) # dump/load
# f1 = open('json_file2', 'w')
# json.dump(dic2, f1)
# f2.close() # f2 = open('json_file2', 'r')
# print(json.load(f2))
# f2.close() '''
pkl:只用于Python语言之间的传输,包含所有的python支持的数据类型。
pickle.dump()/pickle.load():写入文件 (这个不仅可以写常规的数据,还可以将对象写入)
'''
import pickle # dic = {'name': 'xiaobai', 'age': 22, 'gender': 'male'}
# ret = pickle.dumps(dic)
# print(ret)
#
# print(pickle.loads(ret)) # f1 = open('pkl_file', 'wb') # data in bytes-type was written
# pickle.dump(dic, f1)
# f1.close()
#
# f2 = open('pkl_file', 'rb') # default mode='r', 'rb' has to be set
# print(pickle.load(f2)) # class A:
# name = 'xiaobai'
# def func(self):
# print(111)
#
# f1 = open('pkl_file2', 'wb')
# pickle.dump(A, f1)
# f1.close()
#
# f2 = open('pkl_file2', 'rb')
# pickle.load(f2).func(1) '''
random package
'''
# import random # stupied method
# def select():
# char_lis = []
# num_lis =[]
# for i in range(97, 123):
# char_lis.append(chr(i))
# for i in range(0, 10):
# num_lis.append(i)
# i = 0
# code =''
# while i < 5:
# i += 1
# a = random.sample(char_lis)
# b = random.sample(num_lis)
# c = random.sample(a, b)
# code += c
# return code
# print(select()) # smarter one: create random codes including capitalized and lower-cased characters and numbers
# def code():
# codes = ''
# for i in range(1, 6):
# num = str(random.randint(0, 9))
# capitalized_char = chr(random.randint(97, 122))
# lowercased_char = chr(random.randint(65, 90))
# c1 = random.choice([num, capitalized_char, lowercased_char])
# codes += c1
# return codes
#
#
# print(code())
#
# print(random.sample([1, 3, 5, 'a'], 2)) # two arguments required: iterable para, number
# print(random.random()) # return float between 0-1
# print(random.randrange(1, 3)) # randrange: exclude lower bound
# print(random.randint(10, 11)) # randint: include lower bound
# print(random.uniform(0, 10)) # float between upper and lower bounds

day06-codes and exercise in class的更多相关文章

  1. UVA-146 ID Codes

    It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In order to exerc ...

  2. uva146 ID codes

    Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...

  3. POJ 1146:ID Codes

    ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6281 Accepted: 3769 Description ...

  4. poj-1146 ID codes

    Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...

  5. Python基础(正则、序列化、常用模块和面向对象)-day06

    写在前面 上课第六天,打卡: 天地不仁,以万物为刍狗: 一.正则 - 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法: - 在线正则工具:http://tool ...

  6. UVA 146 ID Codes(下一个排列)

    C - ID Codes Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Statu ...

  7. UVa-146 - ID Codes(下一个排列)

    /* ID Codes It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...

  8. poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )

    ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6229   Accepted: 3737 Descript ...

  9. POJ 1146 ID Codes 用字典序思想生成下一个排列组合

    ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7644   Accepted: 4509 Descript ...

随机推荐

  1. IIS 无法安装URL重写模块的解决办法 UrlReWrite (.NET`SQL技术交流 群号206656202)

    下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开I ...

  2. [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP叠加图

    关于如何移植在android上使用SDL,可以参考[原]零基础学习SDL开发之移植SDL2.0到Android 和 [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图 . 在一篇 ...

  3. 防护XSS

    http://blog.csdn.net/kouwoo/article/details/41946683 http://www.2cto.com/article/201309/247100.html ...

  4. Impala 加载Hive的UDF

    Impala的UDF有两种: Native Imapal UDF:使用C++开发的,性能极高,官方性能测试比第二种高出将近10倍 Hive的UDF:是Hive中的UDF,直接加载到Impala中,优点 ...

  5. PHP------练习------投票

    练习------投票 一 .题目要求: 二 .做法 [1]建立数据库 表名:diaoyantimu 表名: diaoyanxuanxiang [2]封装类文件 <?php class DBDA ...

  6. 虚拟机Centos安装docker小记

    本书记录是参考 <Spring Cloud 与 Docker 微服务架构实战(第二版)>这本书实现的. 记录简单几个命令,安装顺序如下: 1. 安装docker所需的包 sudo yum ...

  7. c#用链表来存储并读取写好的配置文件

    别用arraylist,效果没有list好(因为要装箱拆箱,所以会影响性能) 使用list,那我们就来先声明一个List 1) 声明 List<元素类型> myList = new Lis ...

  8. 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

    015-08-09 杨尚刚 高可用架构 此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美 ...

  9. HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others)  ...

  10. DU1525 Euclid's Game 博弈

    HDU1525 Euclid's Game 博弈 题意 给定两个数字 a, b. 每次只能用 较大的值 减去 较小的值的倍数, 两个人轮流进行操作, 第一个得到 0 的胜利. 分析 对于 a == b ...