面向对象 类

  1 #__author:  Administrator
  2 #date:  2016/9/23
  3 """
  4 class Foo:
  5 
  6     def __init__(self, name, age):
  7         self.name = name
  8         # self.age = age
  9         self.__age = age # 私有,外部无法直接访问
 10 
 11     def show(self):
 12         return self.__age
 13 
 14 
 15 obj = Foo('alex', 19)
 16 print(obj.name)
 17 # obj.age
 18 # print(obj.__age)
 19 ret = obj.show()
 20 print(ret)
 21 """
 22 
 23 """
 24 class Foo:
 25     __v = '123'
 26 
 27     def __init__(self):
 28         pass
 29     def show(self):
 30         return Foo.__v
 31     @staticmethod
 32     def stat():
 33         return Foo.__v
 34 # print(Foo.__v)
 35 # ret = Foo().show()
 36 # print(ret)
 37 
 38 ret = Foo.stat()
 39 print(ret)
 40 """
 41 """
 42 class Foo:
 43     def __f1(self):
 44         return 123
 45 
 46     def f2(self):
 47         r = self.__f1()
 48         return r
 49 
 50 obj = Foo()
 51 ret = obj.f2()
 52 print(ret)
 53 """
 54 
 55 """
 56 class F:
 57     def __init__(self):
 58         self.ge = 123
 59         self.__gene = 123
 60 
 61 class S(F):
 62     def __init__(self,name):
 63         self.name = name
 64         self.__age = 18
 65         super(S, self).__init__()
 66 
 67     def show(self):
 68         print(self.name)
 69         print(self.__age)
 70         print(self.ge)
 71         print(self.__gene)
 72 
 73 s = S('alex')
 74 s.show()
 75 """
 76 
 77 """
 78 class Foo:
 79     def __init__(self):
 80         print('init')
 81 
 82     def __call__(self, *args, **kwargs):
 83         print('call')
 84 
 85 # obj = Foo()
 86 # obj()
 87 Foo()()
 88 """
 89 # s = "123"
 90 # # s = str('123')
 91 #
 92 # i = int(s)
 93 # print(i,type(i))
 94 
 95 """
 96 class Foo:
 97 
 98     def __init__(self):
 99         pass
100 
101     def __int__(self):
102         return 1111
103 
104     def __str__(self):
105         return 'alex'
106 
107 obj = Foo()
108 print(obj, type(obj))
109 
110 # int,对象,自动执行对象的 __int__方法,并将返回值赋值给int对象
111 r = int(obj)
112 print(r)
113 i = str(obj)
114 print(i)
115 
116 """
117 """
118 class Foo:
119 
120     def __init__(self,n,a):
121         self.name =n
122         self.age =a
123 
124     def __str__(self):
125         return '%s-%s' %(self.name,self.age,)
126 
127 obj = Foo('alex', 18)
128 print(obj) #print(str(obj)) str(obj)   obj中__str__,并获取其返回值
129 """
130 """
131 class Foo:
132 
133     def __init__(self, name,age):
134         self.name = name
135         self.age = age
136 
137     def __add__(self, other):
138         # self = obj1 (alex,19)
139         # other = obj2(eric,66)
140         # return self.age + other.age
141         #return Foo('tt',99)
142         return Foo(obj1.name, other.age)
143 
144     def __del__(self):
145         print('析构方法') # 对象被销毁()时,自动执行
146 
147 obj1 = Foo('alex', 19)
148 obj2 = Foo('eirc', 66)
149 
150 r = obj1 + obj2
151 # 两个对象相加时,自动执行第一个对象的的 __add__方法,并且将第二个对象当作参数传递进入
152 print(r,type(r))
153 """
154 
155 
156 """
157 class Foo:
158     def __init__(self, name,age):
159         self.name = name
160         self.age = age
161         self.n = 123
162 
163 # obj = Foo('alex', 18)
164 #
165 # d = obj.__dict__
166 # print(d)
167 
168 # ret = Foo.__dict__
169 # print(ret)
170 """
171 
172 # li = [11,22,33,44]
173 # li = list([11,22,33,44])
174 #
175 # li[3]
176 # #
177 #
178 # li[3] = 666
179 #
180 # del li[2]
181 
182 """
183 class Foo:
184 
185     def __init__(self, name,age):
186         self.name = name
187         self.age = age
188 
189     def __getitem__(self, item):
190         return item+10
191 
192     def __setitem__(self, key, value):
193         print(key,value)
194 
195     def __delitem__(self, key):
196         print(key)
197 li = Foo('alex', 18)
198 r= li[8] # 自动执行li对象的类中的 __getitem__方法,8当作参数传递给item
199 print(r)
200 
201 li[100] = "asdf"
202 
203 del li[999]
204 """
205 """
206 class Foo:
207 
208     def __init__(self, name,age):
209         self.name = name
210         self.age = age
211 
212     def __getitem__(self, item):
213         # return item+10
214         # 如果item是基本类型:int,str,索引获取
215         # slice对象的话,切片
216         if type(item) == slice:
217             print('调用这希望内部做切片处理')
218         else:
219             print(item.start)
220             print(item.stop)
221             print(item.step)
222             print('调用这希望内部做索引处理')
223 
224     def __setitem__(self, key, value):
225         print(key,value)
226 
227     def __delitem__(self, key):
228         print(key)
229 
230 li = Foo('alex', 18)
231 li[123]
232 li[1:4:2]
233 
234 li[1:3] = [11,22]
235 
236 del li[1:3]
237 
238 # class Slice:
239 #     def __init__(self,a,b,c):
240 #         self.start = a
241 #         self.end = b
242 #         self.step = c
243 # obj = Slice(1,4,2)
244 # li[999] = "alex"
245 #
246 # del li[234]
247 """
248 """
249 class Foo:
250 
251     def __init__(self, name,age):
252         self.name = name
253         self.age = age
254 
255     def __iter__(self):
256         return iter([11,22,33])
257 li = Foo('alex', 18)
258 # 如果类中有 __iter__ 方法,对象=》可迭代对象
259 # 对象.__iter__() 的返回值: 迭代器
260 # for 循环,迭代器,next
261 # for 循环,可迭代对象,对象.__iter__(),迭代器,next
262 # 1、执行li对象的类F类中的 __iter__方法,并获取其返回值
263 # 2、循环上一步中返回的对象
264 for i in li:
265     print(i)
266 """
267 # li = [11,22,33,44]
268 # li= list([11,22,33,44])
269 # for item in li:
270 #     print(item)
271 
272 """
273 class MyType(type):
274     def __init__(self,*args, **kwargs):
275         # self=Foo
276         print(123)
277         pass
278 
279     def __call__(self, *args, **kwargs):
280         # self=Foo
281         r = self.__new__()
282 
283 
284 #
285 
286 class Foo(object,metaclass=MyType):
287     def __init__(self):
288         pass
289 
290     def __new__(cls, *args, **kwargs):
291         return '对象'
292 
293     def func(self):
294         print('hello wupeiqi')
295 
296 obj = Foo()
297 
298 
299 
300 
301 
302 class Bar:
303     def __init__(self):
304         print(123)
305 
306 
307 obj = Bar()
308 """
309 
310 """
311 while True:
312     try:
313         # 代码块,逻辑
314         inp = input('请输入序号:')
315         i = int(inp)
316     except Exception as e:
317         # e是Exception对象,对象中封装了错误信息
318         # 上述代码块如果出错,自动执行当前块的内容
319         print(e)
320         i = 1
321     print(i)
322 """
323 #li = [11,22]
324 #li[999] # IndexError
325 # int('qwe') # ValueError
326 """
327 def fun():
328     ret = 0
329     try:
330         li = [11, 22]
331         li[1]
332         int('w3r')
333 
334     except IndexError as e:
335         print('IndexError',e)
336     except ValueError as e:
337         print('ValueError',e)
338     except Exception as e:
339         print('Exception',e)
340     else:
341         ret = 1
342         print('elese')
343     finally:
344         print('....')
345 
346     return ret
347 r = fun()
348 if r == 0:
349     print('500')
350 else:
351     pass
352 
353 """
354 """
355 class F:
356     def __init__(self):
357         self.__a = 132
358 
359     def show(self):
360         # print(self.__a)
361         return self.__a
362 
363 class S(F):
364     def __init__(self):
365         self.name = 123
366         super(S, self).__init__()
367 
368 obj = S()
369 r = obj.show()
370 print(r)
371 """
372 """
373 try:
374     # int('asdf')
375     # 主动出发异常
376     # raise Exception('不过了...')
377 except Exception as e:
378     print(e)
379 
380 def db():
381     # return True
382     return False
383 
384 def index():
385     try:
386         r = input(">>")
387         int(r)
388 
389 
390         result = db()
391         if not result:
392             r = open('log','a')
393             r.write('数据库处理错误')
394             # 打开文件,写日志
395             #raise Exception('数据库处理错误')
396     except Exception as e:
397         str_error = str(e)
398         print(str_error)
399         r = open('log', 'a')
400         r.write(str_error)
401         # 打开文件,写日志
402 
403 index()
404 """
405 
406 
407 """
408 class OldBoyError(Exception):
409 
410     def __init__(self, msg):
411         self.message = msg
412 
413     def __str__(self):
414         return self.message
415 
416 # obj = OldBoyError('xxx')
417 # print(obj)
418 try:
419     raise OldBoyError('我错了...')
420 except OldBoyError as e:
421     print(e)# e对象的__str__()方法,获取返回
422 
423 """
424 
425 # assert 条件,断言,用于强制用户服从,不服从就报错,可补货,一般不补货
426 # print(23)
427 # assert 1==2
428 # print(456)
429 
430 
431 """
432 class Foo:
433     def __init__(self, name,age):
434         self.name = name
435         self.age = age
436 
437     def show(self):
438         return  "%s-%s " %(self.name,self.age)
439     def __int__(self):
440         return 123
441     def __str__(self):
442         return 'uuu'
443 obj = Foo('alex', 18)
444 
445 r = int(obj) # r = 123
446 u = str(obj)
447 b = 'name'
448 """
449 
450 
451 # getattr
452 # hasattr
453 # setattr
454 # delattr
455 # 通过字符串的形式操作对象中的成员
456 
457 # func = getattr(obj, 'show')
458 # print(func)
459 # r = func()
460 # print(r)
461 
462 # print(hasattr(obj, 'name'))
463 # obj.k1
464 # setattr(obj, 'k1', 'v1')
465 # print(obj.k1)
466 # obj.name
467 # delattr(obj, 'name')
468 # obj.name
469 
470 # 去什么东西里面获取什么内容
471 # inp = input('>>>')
472 # v = getattr(obj, inp)
473 # print(v)
474 
475 
476 
477 """
478 obj.name
479 b = "name"
480 obj.b # obj.name
481 """
482 # b = "name"
483 # obj.__dict__['name']
484 # obj.__dict__[b]
485 
486 # if b == 'name':
487 #     obj.name
488 
489 
490 """
491 class Foo:
492 
493     stat = '123'
494 
495     def __init__(self, name,age):
496         self.name = name
497         self.age = age
498 
499 # 通过字符串的形式操作对象中的成员
500 r = getattr(Foo, 'stat')
501 print(r)
502 """
503 
504 """
505 import s2
506 
507 
508 # r1 = s2.NAME
509 # print(r1)
510 # r2 = s2.func()
511 # print(r2)
512 
513 r1 = getattr(s2, 'NAME')
514 print(r1)
515 
516 r2 = getattr(s2, 'func')
517 result = r2()
518 print(result)
519 
520 cls = getattr(s2, 'Foo')
521 print(cls)
522 obj = cls()
523 print(obj)
524 print(obj.name)
525 """
526 """
527 import s2
528 inp = input('请输入要查看的URL:')
529 if hasattr(s2, inp):
530     func = getattr(s2, inp)
531     result = func()
532     print(result)
533 else:
534     print('404')
535 """
536 
537 # class Foo:
538 #     def __init__(self, name,age):
539 #         self.name = name
540 #         self.age = age
541 
542 # obj = Foo() # obj对象,obj也成为Foo类的 实例,(实例化)
543 # obj1 = Foo()
544 # obj2 = Foo()
545 # obj3 = Foo()
546 
547 # 单例,用于使用同一份实例(对象)
548 """
549 class Foo:
550     def __init__(self, name,age):
551         self.name = name
552         self.age = age
553 
554     def show(self):
555         print(self.name,self.age)
556 
557 v = None
558 
559 while True:
560     if v:
561         v.show()
562     else:
563         v = Foo('alex', 123)
564         v.show()
565 """
566 class Foo:
567 
568     __v = None
569 
570     @classmethod
571     def get_instance(cls):
572         if cls.__v:
573             return cls.__v
574         else:
575             cls.__v = Foo()
576             return cls.__v
577 
578 # 不要在使用 类()
579 obj1 = Foo.get_instance()
580 print(obj1)
581 obj2 = Foo.get_instance()
582 print(obj2)
583 obj3 = Foo.get_instance()
584 print(obj3)

 

posted @ 2020-06-14 23:41  死循环了  阅读(131)  评论(0编辑  收藏  举报