class Rectangle(): # 有没有括号都行 .
def __init__(self,x,y):
self.x=x
self.y=y def getPeri(self):
return (self.x+self.y)* def getArea(self):
return self.x*self.y rect=Rectangle(,) print('这个长方形的周长是'+str(rect.getPeri())) print('这个长方形的面积是'+str(rect.getArea())) class A:
def __init__(self):
return 'A of A-Cup' a=A() # __init__ should return NONE not 'str'
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
这个长方形的周长是14
这个长方形的面积是12
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/new.py", line , in <module>
a=A()
TypeError: __init__() should return None, not 'str'
>>>

尴尬的是  就看不懂下面的啥东西 ....(更加尴尬的是 , 看了看又会了 .)

 class CapStr(str):
def __new__(cls,string): # 在 一个对象实例化的时候 第一个被调用的方法 .
string=string.upper() # 她的第一个参数就是 , cls 也就是这个类.# new 需要返回一个实例对象
return str.__new__(cls,string)
#return super().__new__(cls,string) # 在将 传入的string 变为大写之后 让 str开始处理 . 并返回 这是一个很聪明的处理方法. a=CapStr('I Love FishC.Com')
print(a)
# 将 new重写 , 将string 处理完毕之后 再调用原来的str的new
# 在子类中重写某一方法的时候 希望父类的该方法不消失 , 那么就要使用 第四行或者第五行的方法了.

.

 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
I LOVE FISHC.COM!
>>>

补充 .

 str1='jack'
print(id(str1))
str1='JACK'
print(id(str1))
print('------------不是一个地址的-----很明显不是同一个变量.---------')
num=
print(id(num))
num+=
print(id(num))
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============

 ------------不是一个地址的-----很明显不是同一个变量.---------

 >>> 

析构函数 .

 >>> class C:
def __init__(self):
print('我是__init__方法,我被调用了 ...')
def __del__(self):
print('我是__del__方法 ,我被调用了 ...') >>> a=
SyntaxError: invalid syntax
>>>
>>>
>>> a=C()
我是__init__方法,我被调用了 ...
>>> b=a
>>> def a
SyntaxError: invalid syntax
>>> del a
>>> del b
我是__del__方法 ,我被调用了 ...

----------------------------------------------------------------------------------------------------------------------------------

class New_int(int):   # 定义一个新的类  继承 int 类
def __add__(self,other): # 重写 + 运算符 # __add__ 就是 int 中 + 的行为
return int.__sub__(self,other) # 重写的 加法运算符 调用 int类 里面的 减法运算运算符 def __sub__(self,other):
return int.__add__(self,other) # 上面的是一个小小的恶作剧 . 把加法和减法的名称进行了互换.
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
>>> 5+6
11
>>> a=5
>>> b=6
>>> a+b
11
>>> c=New_int(7)
>>> d=New_int(10)
>>> c+d
-3
>>> a=New_int(a)
>>> b=New_int(b)
>>> a+b
-1
>>> # 由于没有初始化 int 类型的 等于运算符 所以只好 用 a=New_int()了 .

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 #   下面这个程序 是用来 看看思维如何的 . 看你能不能找出问题 .

 class Try_int(int):
def __add__(self,other):
return self+other def __sub__(self,other):
return self+other # 这里重载了 int类 的加法和减法 . 但是重载的时候 出了问题 . 没有给加法赋予正确的意义 .
# 在这里只是说 +法 到时候调用加法 . 这样就形成了无穷的递归/
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
>>> a=5
>>> b=6
>>> a+b
11
>>> 5+6
11
>>> a=Try_int(5)
>>> b=Try_int(6)
>>> a+b
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a+b
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other .
.
.
.
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
RecursionError: maximum recursion depth exceeded
>>>

至于上述 为什么 必须先将 一个变量用 自己定义个类先声明(a=New_int(5).....)一下呢?

这是因为在这里 + 有不同的意思 有的是int类的+,有的是你自己定义的类的 + . 当开始相加的时候 系统会根据变量的数据类型去掉用相应的加法 ,

这就是为什么要 这样做了(a=New_int(5).....)

Python ~~~ 面向对象的利器的更多相关文章

  1. python 面向对象终极进阶之开发流程

    好了,你现在会了面向对象的各种语法了,  但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...

  2. 5.15 python 面向对象的软件开发&领域模型

    1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...

  3. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  4. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  5. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  6. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  7. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  8. Python面向对象详解

    Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是

  9. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

随机推荐

  1. spring3-hibernate3整合

    Spring与Hibernate整合关键点: 1) Hibernate的SessionFactory对象交给Spring创建: 2) hibernate事务交给spring的声明式事务管理. SH整合 ...

  2. HTML5自学笔记[ 6 ]data自定义数据

    在标签中添加data-name属性并赋值,在js脚本中用ele.dataset.name就可以获取该属性的值.如: <div id="box" data-age=" ...

  3. Uva---10881 Piotr's Ants(蚂蚁)

    Problem DPiotr's AntsTime Limit: 2 seconds "One thing is for certain: there is no stopping them ...

  4. hashtable 实现

    #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct _hashnod ...

  5. 集成 AliPay - 支付宝

    作者感言 前面我已经写了一篇关于WeChat SDK的支付篇, 那我们继续研究接下来的支付SDK, 这次就是国民支付软件支付宝, 下面就让我们来看看怎么集成AliPay SDK.最后:如果你有更好的建 ...

  6. Oracle函数大全之转换函数

    chartorowid(c1) [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SELECT ...

  7. python与字符集编码

    讲的比较明白的博客:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 以上面博文的汉为例子,汉字的GBK编码是baba, UNIC ...

  8. C#WPF做FTP上传下载获取文件列表

    Xaml.cs: using Microsoft.Win32;using System;using System.Collections.Generic;using System.IO;using S ...

  9. 个人收集的一些网页上一键云DDOS攻击的网站、IP地址测试,服务器压力测试

    http://bbs.itzmx.com/thread-9018-1-1.html #1 - Network Stresser - http://networkstresser.com#2 - Lif ...

  10. String.resize()

    void resize (size_t n); void resize (size_t n, char c); 测试代码: // resizing string #include <iostre ...