# 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. Sql Server中利用ISNULL方法判断数字并预设值

    1.ISNULL方法有两个参数,ISNULL(a,b),表达式含义为如果a为NULL,则设置该字段内容为b. 例如 table tab id sum 1 1 2 null select t.id,is ...

  2. 云计算之概念——IaaS、SaaS、PaaS、Daas

    云计算通俗来说就是输入/输出和计算不在一个主机上.计算要用到计算设备,计算设备一般是指CPU.内存和硬盘,输入/输出设备一般是指键盘.鼠标.显示器.耳机.音响.话筒等外设.而我们的个人计算机是使用主板 ...

  3. SIMATIC 1500 PLC 同步轴,状态字StatusWord信号描述

    轴名. StatusWord.X21 (Synchronizing) 正在建立同步 轴名. StatusWord.X22 (Synchronous) 已经建立同步

  4. myeclipse 复制项目不包含svn或CVS目录

    目前只记录到2个方法:(SVN和CVS都适用) 方法一:导出法 1.右击需要cp的目录,点击export,General/File System 2.next 3.确认你选择的目录,并勾选:Creat ...

  5. July 16th 2017 Week 29th Sunday

    Opportunities are like sunrises, if you wait too long, you miss them. 机会如同日出,等得太久就会错过. Indecision is ...

  6. July 15th 2017 Week 28th Saturday

    If I can't hear your heartbeat, you are too far away. 如果我听不见你的心跳,那是因为你离我太远了. Only when the two tight ...

  7. PHP 字符串补0

    转自:https://www.cnblogs.com/bluebirds/archive/2016/11/22/6091099.html#undefined 概述:项目中经常会使用到在一串编码左边.右 ...

  8. MATLAB基础指令操作

    由于课程实验需要学习使用了MATLAB,在此记录一下MATLAB的基本操作和命令,供参考与查阅. 学习过程中的资料也链接如下: MATLAB矩阵运算:https://wenku.baidu.com/v ...

  9. Software Architecture

    Software Architecture Architecture serves as a blueprint for a system. It provides an abstraction to ...

  10. 理解HTML DOM

    DOM(Document Object Model)全称文档对象模型.DOM其实是JavaScript操作网页的一套API接口,定义了访问和操作HTML文档的标准.定义了所有HTML元素的对象和属性, ...