# 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学习(一) 数据表的基本操作

    1.创建一个数据库,数据库的名字是UserInfo create database UserInfo; 2.创建一个数据表,数据表的名字是UserInfocreate table UserInfo( ...

  2. QT的编译原理

    https://www.cnblogs.com/findumars/p/4948896.html

  3. Qt::FocusPolicy的使用

    http://blog.csdn.net/imxiangzi/article/details/50742813

  4. 【2017.09.15 智能驾驶/汽车电子】汽车高级驾驶辅助ADAS常用传感器厂商:激光雷达篇

    不定期更新,主要是汇总Internet上的激光雷达厂商资讯,不涉及技术,以备参考. 1. Innoviz:固态激光雷达公司 新闻链接:http://36kr.com/p/5092055.html 激光 ...

  5. Lovable eccentric

    It took him four years to stage this elaborate joke simply to prove that critics do not always know ...

  6. DB TABLE实践

    我的数据库设计实践(一)   兜兜转转,突然发现我现在已经是一个老司机了,一直写代码都很忙,没有把很多点点滴滴的记录下来,今天开始就开始一个系列,分析当年我接触或者我设计过的表结构,有好有坏,有欢喜也 ...

  7. 用jq给link和script标签加随机的版本号(兼容IE5)

    $("link,script").each(function(){ var t=Math.random().toFixed(4); /*var $tag=$(this).prop( ...

  8. Django admin页面 显示中文问题

    http://127.0.0.1:8000/admin/ 该页中实现中文显示. 1.  页面显示的数据表表名 实现中文显示. models.Model类的内部类Meta,有两个特殊的选项:verbos ...

  9. SpringMVC错误小结

    No mapping found for HTTP request with URI [/SpringMVC/user.do] in DispatcherServlet with name 'spri ...

  10. 3.为JDeveloper添加不能的workspace

    1.点击选中JDeveloper,在属性中,选中快捷方式, 可以看到目标中的值为C:\Oracle\Middleware\jdeveloper\jdeveloper.exe, 只需要在修改为C:\Or ...