Python ~~~ 面向对象的利器
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 ~~~ 面向对象的利器的更多相关文章
- python 面向对象终极进阶之开发流程
好了,你现在会了面向对象的各种语法了, 但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...
- 5.15 python 面向对象的软件开发&领域模型
1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- saiku-添加数据源以及保证数据源的一致性
采用任何一种添加数据源的方式都不能保证数据源的一致和完整,所以需要两种结合来管理数据源 1.通过saiku的管理台添加数据源 ① 第一种方式:schema和ds都在管理台添加 1)上传schema文件 ...
- 菜单滑动-menu swipe
http://tympanus.net/codrops/ http://www.idangero.us/sliders/swiper/index.php //触摸滑动
- webService—使用javaxws发布自己的webService
1.创建一个普通类,使用javaxws注解标示该类 2.解析wsdl文档生成类后调用webService
- Stylus Studio的安装与卸载
- 修改linux 文件权限命令 chmod
[转载自:http://www.cnblogs.com/avril/archive/2010/03/23/1692809.html] Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以 ...
- PHP+socket游戏数据统计平台发包接包类库
<?php /** * @title: PHP+socket游戏数据统计平台发包接包类库 * @version: 1.0 * @author: perry <perry@1kyou.com ...
- TADOTable 用过滤事件 后 记录数据和 记录的内容
用 过滤事件,过滤后 ADOTbTrade.RecordCount 是总数, 但是,记录内容是 过滤后的 ADOTbTrade.First; while not ADOTbTrade.Eof do b ...
- vim的编码设置
VIM的相关字符编码主要有三个参数 fencs: 它是一个编码格式的猜测列表.当用vim打开某个文件时,会依次取这里面的编码进行解码,如果某个编码格式从头至尾解码正确,那么就用那个编码 fenc:它是 ...
- Program D--贪心-区间覆盖
Given several segments of line (int the X axis) with coordinates [Li,Ri]. You are to choose the mini ...
- Android 自动朗读(TTS)
在Android应用中,有时候需要朗读一些文本内容,今天介绍一下Android系统自带的朗读TextToSpeech(TTS).自动朗读支持可以对指定文本内容进行朗读,还可以把文本对应的音频录制成音频 ...