day06-codes and exercise in class
# 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的更多相关文章
- UVA-146 ID Codes
It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In order to exerc ...
- uva146 ID codes
Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...
- POJ 1146:ID Codes
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6281 Accepted: 3769 Description ...
- poj-1146 ID codes
Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...
- Python基础(正则、序列化、常用模块和面向对象)-day06
写在前面 上课第六天,打卡: 天地不仁,以万物为刍狗: 一.正则 - 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法: - 在线正则工具:http://tool ...
- UVA 146 ID Codes(下一个排列)
C - ID Codes Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Statu ...
- UVa-146 - ID Codes(下一个排列)
/* ID Codes It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...
- poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6229 Accepted: 3737 Descript ...
- POJ 1146 ID Codes 用字典序思想生成下一个排列组合
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7644 Accepted: 4509 Descript ...
随机推荐
- ComboBox赋值ItemsSource数据源的时候会触发SelectionChanged改变事件的解决办法
我用的方法是设置开关 bool flag = false;//默认开关关闭(全局变量) flag = false;在赋值数据源之前设置关闭box.ItemsSource = lstProperty;/ ...
- windows线程时间打印
https://blog.csdn.net/xingcen/article/details/70084029
- LINUX系统文件类型分类
使用LINUX过程中,时常会对文件进行操作.但是linux中文件究竟有哪些分类呢?今天让我们大家来总结一下吧! 概述: linux文件可以分为五种类型,分别为:普通文件.目录.字符设备或块设备.套接口 ...
- 应用线性代数简介 - 向量,矩阵和最小二乘法 By Stephen Boyd and Lieven Vandenberghe
Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares 应用线性代数简介 - 向量,矩阵和最小二乘法 ...
- base64编码加密图片和展示图片
base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于 网络传输.由于这些二进制字符在传输协议中属于控制字符, ...
- linux:相关命令以及笔记
首先,在linux 或者 unix里没有任何的反馈就叫成功,例如: (1)命令执行成功的样子:返回了登录用户信息 (2)命令执行失败的样子:没有返回任何东西 1.按键出现状况 解决:可以使用ctrl+ ...
- python UI自动化实战记录七:页面2用例编写
使用python自带的unittest测试框架,用例继承自unittest.TestCase类. 1 引入接口类和页面类 2 setUp函数中打开页面,定义接口对象 3 tearDown函数中关闭页面 ...
- POJ-1845 Sumdiv---因子和(快速幂+快速加法+因子和公式)
题目链接: https://cn.vjudge.net/problem/POJ-1845 题目大意: 求AB的因子和 解题思路: 先将A质因数分解,然后B次方的质因数指数就是乘上B即可 这里要mod9 ...
- 【[CQOI2014]数三角形】
lx让做的题,其实很简单,难度评到紫令人吃惊 首先读进来\(n,m\)先\(++\),之后就是一个格点数为\(n*m\)的矩阵了 我们直接求很那做,补集转化一下,我们容斥来做 首先所有的情况自然是\( ...
- window.jQuery || document.write("<script src='__PUBLIC__/assets/js/jquery.js'>"+"<"+"/script>")
今天无意中看到这样一段代码 <script type="text/javascript"> window.jQuery || document.write(" ...